Given a Weather
table, write a SQL query to find all dates' Ids with higher temperature compared to its previous (yesterday's) dates.
+---------+------------+------------------+ | Id(INT) | Date(DATE) | Temperature(INT) | +---------+------------+------------------+ | 1 | 2015-01-01 | 10 | | 2 | 2015-01-02 | 25 | | 3 | 2015-01-03 | 20 | | 4 | 2015-01-04 | 30 | +---------+------------+------------------+
For example, return the following Ids for the above Weather table:
+----+ | Id | +----+ | 2 | | 4 | +----+
create table weather(
Id int not null,
Date date,
Temperature int);
insert into weather values
(1,'2015-01-01',10),
(2,'2015-01-02',25),
(3,'2015-01-03',20),
(4,'2015-01-04',30);
1、where
select w1.Id from Weather w1, Weather w2
where convert(datetime,w1.date)=convert(datetime,w2.date)+1 and w1.Temperature>w2.Temperature;
2、inner join … on
select w1.Id from Weather w1 inner join Weather w2
on convert(datetime,w1.date)=convert(datetime,w2.date)+1 and w1.Temperature>w2.Temperature;
--开窗函数只能出现在 SELECT 或 ORDER BY 子句中
--select *,LAG(Temperature) over(order by Date) PrivousWeather from weather
--where Temperature>LAG(Temperature) over(order by Date)
3、窗口函数
with temp as
(
select *,LAG(Temperature) over(order by Date) PrivousWeather from weather
)
select id from temp where Temperature>PrivousWeather
datetime
从1753年1月1日到9999年12月31日的日期和时间数据,精确度为百分之三秒(等于 3.33毫秒或0.00333秒)。如下表所示,把值调整到.000、.003、或.007 秒的增量。
日期和时间部分,可以表示的日期范围从公元1753年1月1日00:00:00.000 到9999年12月31日23:59:59.997 ,精确到3.33毫秒,它需要8个字节的存储空间。
date
SQL Server 2008新引进的数据类型。它表示一个日子,不包含时间部分,可以表示的日期范围从公元元年1月1日到9999年12月31日。只需要3个字节的存储空间。
注:date类型与datetime类型相比还有一点比较特殊,那就是date类型数值不能直接和int类型数值相运算,必须先转换成datetime类型