获取SQL中的日期范围
我有一张像下面这样的桌子获取SQL中的日期范围,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一张像下面这样的桌子 Price | DateTime --------+------------- 100 | 22/01/2016 210 | 23/01/2016 110 | 24/01/2016 10 | 25/01/2016 20 | 26/01/2016 30 | 13/03/2016 40 | 14/03/2016 50 | 15/03/2016 60 | 16/03/2016 现在我们
Price | DateTime
--------+-------------
100 | 22/01/2016
210 | 23/01/2016
110 | 24/01/2016
10 | 25/01/2016
20 | 26/01/2016
30 | 13/03/2016
40 | 14/03/2016
50 | 15/03/2016
60 | 16/03/2016
现在我们可以看到其中有两个日期范围:
如何查询数据库以获得上述结果,即我所描述的数据范围?数据可以按日期排序,但如何获取范围您的范围似乎是按连续日期定义的。通过
行数()
,您可以通过减去递增的数字来分配组。剩下的是聚合:
select min(datetime) as range_start, max(datetime) as range_end
from (select t.*,
dateadd(day, - row_number() over (order by datetime), datetime) as grp
from t
) t
group by grp;
首先定义一个日期范围。如果周日有间隙,日期范围是否中断?是的,即使周日也会被视为间隙,间隙的阈值是一天什么版本的SQL Server?SQL Server 2016这非常简洁,但依赖于日期是唯一的键?如果一个范围内的同一日期有两行,那么它将分为两个日期范围。也许按日期时间添加一个组会起作用——当然,如果这是要求的话。@JohnRC。如果有重复的日期,那么使用
densite\u rank()
而不是row\u number()
。那太好了-我以前没有见过densite\u rank()
-非常有用:)@GordonLinoff你的答案是正确的,我只是想知道如果我们不得不忽略周末,比如说如果差距在周六周日,那么范围不应该打破,而且如果我们想明确提到打破范围的阈值或差距,比如我想说2天的差距不应该打破我的范围。还有什么办法可以做到这一点吗。谢谢你advance@ahmadsaleem . . . 我建议有一张日历表。