我有一个类似于下面的表
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
现在我们可以看到其中有两个日期范围:
如何查询我的数据库以获得上述结果,即我描述的数据范围?数据可以按日期排序,但如何获得范围
答案 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;