leetcode上升的温度再复习-笛卡尔积(交叉连接)-日期加减函数

2023-12-16 20:28:38

重新做上升的温度这一题的时候,看到之前很多的题解,这里结合一些题解看看有什么能学到的,其实这一题我现在返回来看,刚开始看依旧没有思路,还是看了题解才有想法。

理一下学习的思路:这一题就是需要通过连接解题,连接两张相同的表 ,w1表作为今天的表 利用w1表的日期比w2表的日期大一天连接,w2表作为昨天的表,也就是今天连接昨天。

然后借着这一题,学习一下几个针对日期加减的函数。我还是放上这个题目吧,万一后来的人看不懂这个题。

1.下面是我原来的题解,也是那么多题解里面的第一个题解,现在回去看真的觉得是多次一举,这样的题解就是在装逼啊,根本没必要。

select id from (select id,temperature,recordDate,lag(temperature)over(order by recordDate) as last_temperature,lag(recordDate)over(order by recordDate) as last_date from Weather) as a where temperature>last_temperature and datediff(recordDate,last_date)=1;

2.这是我犯下的一个错误

我理解题目和题解之后就想出来下面的语句,但是提交之后就是不正确,然后我多看了几个别人的题解发现也有人犯了这个错误,你也看一下有没有什么问题呢?

select w1.id from weather w1, weather w2 where w1.recordDate=w2.recordDate+1 and w1.temperature>w2.temperature;

其实问题就是单独对日期加减是有可能出错的,原因如下

3.两种题解其实是一样的

以下的两种操作是一样的,为什么呢?你理解笛卡尔积就明白了,根据我之前的博客https://blog.csdn.net/qq_45828965/article/details/134642986?spm=1001.2014.3001.5502,里面有一个我百度到别人的答案,就是因为笛卡尔连接也就是交叉连接有两种表达方式,下面两种题解就是。

select w1.id from weather w1, weather w2 where datediff(w1.recordDate,w2.recordDate)=1 and w1.temperature>w2.temperature;

select w1.id from weather w1 join weather w2 on datediff(w1.recordDate,w2.recordDate)=1 where w1.temperature>w2.temperature;

如果还不理解的话,看下图。

4.datediff()使用方法

Datediff(begin日期,end日期)这个最简单了,而且感觉很常用啊

5.adddate()使用方法 这是mysql的函数

下面的图片中讲的很好:

1)首先adddate()有两种表述方法:date_add()和adddate()

2)其次里面的参数也有两种表述方法:

(日期,interval 差值,单位)=你想要的日期(interval这个关键字,中文代表间隔)

(日期,天数)=你想要的日期

6.timestampdiff()使用方法

这个函数有三个参数,timestampdiff(单位如DAY,begin日期,end日期)=差值

1)其中单位有如下选择:

2)日期有两种数据类型,date和datetime;而且还可以混合,至于可以怎么混合,需要的可以去找找,我这里将基本内容就行,到时候用到了自然会百度。

其实这个在这一道题完全没必要,很明显这里的日期最小也是日,很分秒这种的单位没有关系啊。但是这是为了学习一下这个函数。

7.dateadd()使用方法 注意这是sql server的函数

dateadd(单位,差值,日期)=你想要的日期

单位有如下的选择

总结一下

1)复习了交叉连接,自连接

2)日期不能擅自加减要斟酌

3)四个关于日期加减的函数:datediff(),timestamp(),adddate(),最后一个dateadd()是sql server的函数碰到了就一起放上来

4)温故而知新,之前菜鸟看到的东西就是不够多!!

文章来源:https://blog.csdn.net/qq_45828965/article/details/135037083
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。