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

Oracle中如何统计多行连续日期的连续天数(无法使用DATEDIFF)

Oracle数据库统计连续日期天数

需求:在Oracle数据库中统计连续日期的天数,连续日期需合并为一行,显示该连续段的起始日期和连续天数。例如当存在01-MAY-25、02-MAY-25、03-MAY-25这三条数据时,需返回一行以01-MAY-25为起始日期、连续天数为3的结果。

原始数据表

IDX_DATE
101-MAY-25
202-MAY-25
303-MAY-25
411-MAY-25
521-MAY-25
622-MAY-25
725-MAY-25
827-MAY-25
928-MAY-25

期望结果

IDX_DATENUM_DAYS
101-MAY-253
411-MAY-251
521-MAY-252
725-MAY-251
827-MAY-252

注:Oracle数据库不支持DATEDIFF函数,需使用Oracle原生语法实现。


解决方案

使用Oracle窗口函数实现连续日期分组统计,SQL语句如下:

WITH date_groups AS (
    SELECT 
        ID,
        X_DATE,
        -- 生成分组标识:连续日期的X_DATE减去行号后值一致
        X_DATE - ROW_NUMBER() OVER (ORDER BY X_DATE) AS group_id
    FROM your_table_name -- 替换为实际表名
)
SELECT 
    MIN(ID) AS ID,
    MIN(X_DATE) AS X_DATE,
    COUNT(*) AS NUM_DAYS
FROM date_groups
GROUP BY group_id
ORDER BY X_DATE;

逻辑说明

  1. 分组标识生成:利用ROW_NUMBER()按日期排序生成递增行号,连续日期减去对应行号后会得到相同的group_id,非连续日期则生成不同的group_id,以此区分不同的连续日期段。
  2. 聚合统计:按group_id分组后,取每组最小的ID(对应连续段的第一条数据ID)、最小的日期(连续段起始日期),统计每组的行数即为该段的连续天数。
  3. 排序输出:最终按起始日期排序,保证结果顺序符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:07:44