我需要做些什么来实现以下目标?不知何故,我似乎找不到一个好的解决方案。
我有几个CTE,最后一个只生成DATETIME
值的列表,带有行号列,这些值按DATETIME
排序。
例如
rn datetime
---------------------------
1 2023-01-07 01:00:00.000
2 2023-01-08 05:30:00.000
3 2023-01-08 08:00:00.000
4 2023-01-09 21:30:00.000
我必须如何将此CTE相互连接才能获得以下结果:
from to
---------------------------------------------------
2023-01-07 01:00:00.000 2023-01-08 05:30:00.000
2023-01-08 08:00:00.000 2023-01-09 21:30:00.000
执行常规内部连接(使用t1.rn = t2.rn - 1
)会多出一行(从05:30到08:00的那一行),所以基本上每个日期只能“使用”一次。
希望这是有道理的...谢谢!
内部将CTE与其自身联接,这没有返回所需的结果。
2条答案
按热度按时间edqdpe6u1#
您可以透视CTE的结果并使用以下算法分配行:想到模2。
假设CTE返回列
dt
(日期时间字段)和rn
(整数行号):在T-SQL上,我们还可以利用整数除法来表示对分组:
f4t66c6m2#
通过使用
LAG
检索结果集中的前一列值,可以避免JOIN和GROUP BY。服务器可以生成一个执行计划,该计划只对数据进行一次迭代,而不是进行联接或分组:行号本身可以从
datetime
计算: