写在前面
-
难度:简单
题目
给定一个 Weather 表,编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 Id。
思路
此处只有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
日期+ adddate(date,1) #得到date后的1天 示例:SELECT ADDDATE('2017-01-02',1) #得到2017-01-03
日期格式化 在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
oracle
日期差 date1-date2 示例:查看员工入职了多少天
select ename,hiredate,floor(sysdate-hiredate)
from emp
日期+ 示例:员工入职一周后是几号
select ename,hiredate 入职日期,hiredate+7 入职一周
from emp
日期格式化 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')