题目
有如下一张表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即表示相邻

本文通过一个具体的SQL题目介绍了如何使用DATEDIFF函数和自关联来解决数据查询问题,探讨了不同的解决方案,包括官方提供的两种方法及一种使用窗口函数的创新方法。

550

被折叠的 条评论
为什么被折叠?



