Oracle生成等距序列
最近项目中有一个按时间区间统计数量的需求,于是乎查询了一些资料,通过先生成等距序列,再联数据列查询的方式实现。
1.生成等距数值序列
select rownum as day from dual connect by rownum <=12
结果如下:
2.生成本周的日期序列
SELECT
to_char(to_date(to_char(trunc(next_day(sysdate-8, 1)+1), 'MM-dd'), 'MM-dd')+ LEVEL - 1, 'MM-dd') day
FROM DUAL
CONNECT BY LEVEL <= to_date(to_char(trunc(next_day(sysdate-8, 1)+7)+1, 'MM-dd'), 'MM-dd') -
to_date(to_char(trunc(next_day(sysdate-8, 1)+1), 'mm-dd'), 'mm-dd')
结果如下:
3.生成本月的日期序列
SELECT
to_char(to_date(to_char(TRUNC(SYSDATE, 'MM'), 'MM-dd'), 'MM-dd')+ LEVEL -1, 'MM-dd') day
FROM DUAL
CONNECT BY LEVEL <= to_date(to_char(last_day(SYSDATE), 'MM-dd'), 'MM-dd')+1 -
to_date(to_char(TRUNC(SYSDATE, 'MM'), 'MM-dd'), 'MM-dd')
结果如下:
4.生成本年的时间序列
SELECT
TO_CHAR(ADD_MONTHS(TO_DATE(to_char(trunc(sysdate, 'yyyy'), 'yyyy-MM'), 'yyyy-MM'), ROWNUM - 1), 'yyyy-MM') day
FROM DUAL
CONNECT BY ROWNUM <= 12
结果如下:
通过生成以上序列联立数据列后,可实现如下的统计效果:
注:以上方法仅个人摸索使用,可能还有其他更优写法,仅供参考