sql - 在 SQL 中获取日期范围

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

如何查询我的数据库以获得上述结果,即我描述的数据范围?数据可以按日期排序,但如何获取范围

最佳答案

您的范围似乎是由连续的日期定义的。您可以通过减去递增的数字来分配组——通过 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;

关于sql - 在 SQL 中获取日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46708883/

相关文章:

php - Laravel:在迁移过程中重命名表字段而不删除数据

sql - MS SQL Server 优化器和不同的表和字段别名

sql-server - 为什么在 T-SQL 中执行循环如此困难

SQL Server - 解析 GPX 文件

c# - SqlDataReader 和 SQL Server 2016 FOR JSON 将 json 拆分为 2k 字节的 block

tsql - 如何使用SQL查询选择语句检查列是否为空或空?

SQL Server 连接 GROUP BY

php - 选择数据时表列的条件

sql-server - SQL Server 中是否可能发生程序化事件

sql-server - 如何在sql server中添加具有自动增量的主键列