[SQL刷题]LeetCode:197. 上升的温度

847 阅读2分钟

写在前面

题目

给定一个 Weather 表,编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 Id。

例如,根据上述给定的 Weather 表格,返回如下 Id:

思路

此处只有2个条件:

  1. 今天比昨天
  2. 温度要高

那数据都是在一个表里面,需要用到自连接,条件就是上面2个。

select w1.id
from Weather w1,Weather w2
where datediff(w1.recorddate,w2.recorddate)=1
and w1.Temperature>w2.Temperature

扩展

mysql


日期差 datediff是mysql中的时间处理函数之一 datediff(date1,date2) #得到的是date1-date2的相差的日期天数,如果date1晚于date2,那就是正值。 示例:SELECT DATEDIFF('2017-01-02','2017-01-01') #返回1

image.png


日期+ adddate(date,1) #得到date后的1天 示例:SELECT ADDDATE('2017-01-02',1) #得到2017-01-03

image.png


日期格式化 在mysql中可以用date_format(date,format) 其中常见的format

%d	月的天,数值(00-31)
%e	月的天,数值(0-31)
%m	月,数值(00-12)
%Y	年,4 位
%y	年,2 位

问题:1981年每个月入职了多少个员工

SELECT DATE_FORMAT(hiredate,'%Y-%m') AS MON,COUNT(*)
FROM EMP
WHERE DATE_FORMAT(hiredate,'%Y')='1981'
GROUP BY MON

image.png

oracle


日期差 date1-date2 示例:查看员工入职了多少天

select ename,hiredate,floor(sysdate-hiredate)
from emp

image.png


日期+ 示例:员工入职一周后是几号

select ename,hiredate 入职日期,hiredate+7 入职一周
from emp

image.png


日期格式化 to_char可以对日期进行字符串格式化 to_date是对字符串转成对应的日期格式 yyyy-mm-dd就是常见的年月日格式 但是oracle中group by后面不能跟别名,mysql是可以的 问题:1981年每个月入职了多少个员工

SELECT to_char(hiredate,'yyyy-mm') AS MON,COUNT(*)
FROM EMP
WHERE to_char(hiredate,'yyyy')='1981'
GROUP BY to_char(hiredate,'yyyy-mm')