获取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
现在我们可以看到其中有两个日期范围:

  • 2016年1月22日->2016年1月26日
  • 2016年3月13日->2016年3月16日

  • 如何查询数据库以获得上述结果,即我所描述的数据范围?数据可以按日期排序,但如何获取范围您的范围似乎是按连续日期定义的。通过
    行数()
    ,您可以通过减去递增的数字来分配组。剩下的是聚合:

    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 . . . 我建议有一张日历表。