首页 > 数据库 > mysql教程 > 如何在 SQL 中识别连续的日期范围?

如何在 SQL 中识别连续的日期范围?

Linda Hamilton
发布: 2024-12-31 12:22:13
原创
918 人浏览过

How to Identify Consecutive Date Ranges in SQL?

使用 SQL 检测连续日期范围

要识别包含日期序列的列中的连续日期范围,可以使用 SQL 来有效提取开始日期和结束日期每个不同范围的。

考虑以下数据集:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

InfoDate

 

2013-12-04

2013-12-05

2013-12-06

 

2013-12-09

2013-12-10

 

2014-01-01

2014-01-02

2014-01-03

 

2014-01-06

2014-01-07

 

2014-01-29

2014-01-30

2014-01-31

 

2014-02-03

2014-02-04

登录后复制

目标是提取每个连续日期范围的开始和结束日期,结果是:

1

2

3

4

5

6

7

8

StartDate     EndDate

 

2013-12-04    2013-12-06

2013-12-09    2013-12-10

2014-01-01    2014-01-03

2014-01-06    2014-01-07

2014-01-29    2014-01-31

2014-02-03    2014-02-04

登录后复制

可以使用以下步骤设计一个简化且高效的 SQL 解决方案:

  1. 分配一个InfoDate 列中每个日期的唯一行号,创建一个名为 t 的辅助表。此编号有助于对连续日期进行分组。
  2. 根据日期与其相应行号之间的差异对 t 中的行进行分组。这种分组会在日期序列中产生“间隙”。
  3. 在每个组中,最小和最大日期代表连续日期范围的开始和结束日期。

SQL实现此目的的查询是:

1

2

3

4

5

6

7

8

WITH t AS (

  SELECT InfoDate d,ROW_NUMBER() OVER(ORDER BY InfoDate) i

  FROM @d

  GROUP BY InfoDate

)

SELECT MIN(d),MAX(d)

FROM t

GROUP BY DATEDIFF(day,i,d)

登录后复制

以上是如何在 SQL 中识别连续的日期范围?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板