Oracle BI中按30天分组统计90天区间计数并分列输出方法
Oracle BI场景下90天按30天粒度分组统计方案
核心采用条件聚合逻辑实现,不需要额外生成临时日期表,查询性能稳定,可直接适配Oracle BI的物理层、逻辑层查询,输出结果会按x、y维度分组,每个30天区间的计数值作为独立列返回。
区间划分规则
以指定的统计起始日2022-02-20为基准,将90天范围拆分为3个连续30天的独立统计周期:
- 周期1(第1-30天):2022-02-20 至 2022-03-21
- 周期2(第31-60天):2022-03-22 至 2022-04-20
- 周期3(第61-90天):2022-04-21 至 2022-05-20
可直接复用的SQL代码
基于你提供的基础查询修改,兼容Oracle语法:
SELECT x, y, -- 第1个30天周期计数 COUNT(CASE WHEN date_col >= TO_DATE('2022-02-20','YYYY-MM-DD') AND date_col < TO_DATE('2022-02-20','YYYY-MM-DD') + 30 THEN y END) AS cnt_period_1, -- 第2个30天周期计数 COUNT(CASE WHEN date_col >= TO_DATE('2022-02-20','YYYY-MM-DD') + 30 AND date_col < TO_DATE('2022-02-20','YYYY-MM-DD') + 60 THEN y END) AS cnt_period_2, -- 第3个30天周期计数 COUNT(CASE WHEN date_col >= TO_DATE('2022-02-20','YYYY-MM-DD') + 60 AND date_col <= TO_DATE('2022-05-20','YYYY-MM-DD') THEN y END) AS cnt_period_3 FROM tbl WHERE date_col BETWEEN TO_DATE('2022-02-20','YYYY-MM-DD') AND TO_DATE('2022-05-20','YYYY-MM-DD') GROUP BY x, y
适配说明
- 如果你的日期字段是数值型存储的
YYYYMMDD格式,只需要把判断条件里的date_col替换为TO_DATE(TO_CHAR(date_col),'YYYYMMDD')即可,不要直接对数值型日期加天数,避免跨月时数值计算错误。 - 如果后续需要调整统计周期长度、起止时间,只需要修改CASE语句里的偏移天数、WHERE条件里的起止日期即可,不需要改动整体查询结构。
- 该写法相比PIVOT、关联日期维表的方案性能更高,BI工具拉取报表时不会出现维度膨胀、计数重复的问题。
内容的提问来源于stack exchange,提问作者waithira
相关产品推荐
相关产品推荐

