【发布时间】:2021-09-14 19:54:47
【问题描述】:
假设这是我在数据库表中的数据
...
01/01/2016 00:00 367.2647688
01/06/2016 12:30 739.8067639 < INCLUDE THIS
01/01/2018 03:00 412.9686137
01/01/2018 03:30 150.6068046
01/01/2018 04:00 79.22204568
01/01/2018 04:30 648.702222
01/01/2018 09:00 75.41931365
01/01/2018 09:30 923.9435812
01/01/2018 10:00 342.9116004
02/01/2018 02:00 776.4855197 < INCLUDE THIS
08/04/2021 02:30 206.2066933
02/01/2022 03:00 852.9874735
02/01/2022 03:30 586.0818207
02/01/2022 04:00 363.5394613
02/01/2023 04:30 874.3073237
...
这是我获取数据的查询
SELECT * FROM MYTABLE WHERE [DATETIME] >= '2018/01/01 03:00' AND [DATETIME] < '2018/01/01 11:00'
我还希望查询返回此范围之前和之后的一个日期。就像填充的日期一样。
现在我怎样才能有效地做到这一点。一种方法是获取范围内的日期,然后获取小于最小日期的所有数据,并获取其中的最高日期时间并添加到主范围表中,同时对最大日期重复此过程。还有其他方法吗?
【问题讨论】:
-
“前后一个日期”是什么意思?一整天 24 小时,还是那些日子的开始和结束,还是一排?
-
前后一行,表格按日期时间排序
-
那么@GordonLinoff 的答案是正确的。您可能希望在子查询内部添加一个额外的
WHERE过滤器以提高效率,否则LEAD和LAG将在整个表上计算
标签: sql sql-server tsql