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

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

Mary-Kate Olsen
发布: 2025-01-03 05:34:38
原创
131 人浏览过

How to Identify and Extract Consecutive Date Ranges in SQL?

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

问题:

您需要从包含以下内容的表中提取连续的日期范围单列未排序的日期。这些范围表示需要开始日期和结束日期才能准确填充日历对象的时间段。

解决方案:

方法:

为了使用 SQL 解决这个问题,我们可以采用“间隙和岛屿”方法。此方法按连续日期与行号的差异对连续日期进行分组,因为该值对于每个连续序列保持不变。然后,我们使用 MIN() 和 MAX() 函数提取每个组的开始和结束日期。

SQL 查询:

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)
登录后复制

解释:

  • WITH 子句创建公共表表达式 (CTE)名为 t。
  • CTE 选择原始表 @d 中每行的 InfoDate 列 d 和行号 i。
  • 数据按 InfoDate 分组,以确保每个连续序列内的唯一性.
  • SELECT 语句计算每个组的最小和最大日期,表示连续范围的开始和结束日期,
  • DATEDIFF() 函数用于计算行号和日期之间的差值,该差值在每个连续序列中保持不变,有效地将连续日期分组在一起。

输出:

结果表应包含以下内容columns:

  • StartDate
  • EndDate

此输出提供每个连续日期范围的开始和结束日期,允许您使用以下内容填充日历对象必要的日期信息。

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

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