在SQL

时间:2017-10-12 11:51:38

标签: 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

现在我们可以看到其中有两个日期范围:

  1. 22/01/2016 - > 26/01/2016
  2. 13/03/2016 - > 16/032016
  3. 如何查询我的数据库以获得上述结果,即我描述的数据范围?数据可以按日期排序,但如何获得范围

1 个答案:

答案 0 :(得分:6)

您的范围似乎是由连续日期定义的。您可以通过减去不断增加的数字来分配组 - 通过row_number()。其余的是聚合:

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;