题目
有如下一张表T0318
希望得到如下结果:
测试数据
CREATE TABLE T0318 (
ID INT,
REDATE DATE,
TEMP INT)
INSERT INTO T0318 VALUES (1,'2020-1-1',10);
INSERT INTO T0318 VALUES (2,'2020-1-2',18);
INSERT INTO T0318 VALUES (3,'2020-1-3',15);
INSERT INTO T0318 VALUES (4,'2020-1-4',20);
参考答案
官方答案:
-- 第一种
SELECT ID FROM T0318 w
WHERE w.TEMP>(SELECT TEMP FROM T0318 WHERE w.ID=ID+1)
-- 第二种
SELECT
w2.ID
FROM T0318 w1,T0318 w2
WHERE DATEDIFF(DAY,w1.REDATE,w2.REDATE)=1
AND w1.TEMP<w2.TEMP
考点: DATEDIFF()
、自关联检索数据
注意:下面是我与官方的讨论
我的答案
;WITH CTE AS(SELECT ROW_NUMBER() over (ORDER BY REDATE) NO
,ID,REDATE,TEMP
FROM T0318)
SELECT C2.ID FROM CTE C1 JOIN CTE C2 ON C1.NO=C2.NO-1
AND C1.TEMP<C2.TEMP
注意:因为这里ID并不一定联系,使用窗口函数让其连续,然后巧妙使用NO即表示相邻