You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2008 R2 如何判断日期列是否存在连续5天的日期值

SQL Server 2008 R2 连续5天日期判断方案

我们采用分组标记法实现,核心逻辑是给去重后的日期生成递增序号,用日期减去对应序号的天数得到分组标识,连续日期会被分到同一组,统计组内记录数即可判断是否满足连续要求,该方案完全兼容SQL Server 2008 R2版本。


实现代码(直接返回是否存在符合要求的连续日期)

该方案使用EXISTS判断,匹配到符合条件的记录就终止查询,性能最优:

SELECT 
    CASE 
        WHEN EXISTS (
            SELECT 1
            FROM (
                -- 对日期列去重,避免单日多条数据干扰统计
                SELECT 
                    record_date,
                    ROW_NUMBER() OVER (ORDER BY record_date) AS row_num
                FROM (
                    SELECT DISTINCT record_date
                    FROM your_table
                ) t_distinct_date
            ) t_with_rn
            GROUP BY DATEADD(DAY, -row_num, record_date)
            HAVING COUNT(*) >= 5
        ) 
        THEN 'true' 
        ELSE 'false' 
    END AS has_5consecutive_days

扩展代码(查询所有符合要求的连续时间段)

如果需要查看具体的连续日期起止和天数,可以使用以下代码:

SELECT 
    MIN(record_date) AS consecutive_start_date,
    MAX(record_date) AS consecutive_end_date,
    COUNT(*) AS consecutive_days_count
FROM (
    SELECT 
        record_date,
        ROW_NUMBER() OVER (ORDER BY record_date) AS row_num
    FROM (
        SELECT DISTINCT record_date
        FROM your_table
    ) t_distinct_date
) t_with_rn
GROUP BY DATEADD(DAY, -row_num, record_date)
HAVING COUNT(*) >= 5
ORDER BY consecutive_start_date

注意事项

  • 请将代码中的your_table替换为实际表名,record_date替换为实际的日期列名
  • 如果日期列包含时间部分,需要统一转换为纯日期类型避免错误:将所有record_date替换为CONVERT(DATE, record_date)即可
  • 如果你的表已经保证record_date列无重复值,可以去掉内层的SELECT DISTINCT子查询,进一步提升查询效率

内容的提问来源于stack exchange,提问作者user1618180

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 05:36:04