在Oracle SQL Developer中,我需要每月计算从第一天到今天的一些数字(例如计数)。如何通过在日期字段中更改月份来创建循环?现在我在WHERE子句上有一个时间范围,例如(date> ='2017-01-01'和date <'2019-01-01')。所以我需要的是一个表,该表计数几个月,并将结果插入两列:月(2019_01、2019_02等)和计数
答案 0 :(得分:0)
这是一个可以帮助您完成所需工作的示例。它基于Scott的示例架构,其EMP
表包含HIREDATE
列,该列将与名为months
的CTE联接;它利用分层查询来创建12个月的“日历”(这就是CONNECT BY
子句的作用)。我想,您的情况将必须更改。
当前数据:
SQL> select empno, ename, hiredate
2 from emp
3 order by hiredate;
EMPNO ENAME HIREDATE
---------- ---------- ----------
7369 SMITH 17.12.1980
7499 ALLEN 20.02.1981
7521 WARD 22.02.1981
7566 JONES 02.04.1981
7698 BLAKE 01.05.1981
7782 CLARK 09.06.1981
7844 TURNER 08.09.1981
7654 MARTIN 28.09.1981
7839 KING 17.11.1981
7900 JAMES 03.12.1981
7902 FORD 03.12.1981
7934 MILLER 23.01.1982
7788 SCOTT 09.12.1982
7876 ADAMS 12.01.1983
14 rows selected.
SQL>
您可能需要的查询:
SQL> with months as
2 (select add_months(date '1980-12-01', level - 1) mon
3 from dual
4 connect by level <= 12
5 )
6 select to_char(m.mon, 'mm.yyyy') mon,
7 count(e.empno)
8 from months m left join emp e on m.mon = trunc(e.hiredate, 'mm')
9 group by m.mon
10 order by m.mon;
MON COUNT(E.EMPNO)
------- --------------
12.1980 1 --> Smith
01.1981 0
02.1981 2 --> Allen, Ward
03.1981 0
04.1981 1 --> Jones
05.1981 1 --> Blake
06.1981 1 --> Clark
07.1981 0
08.1981 0
09.1981 2 --> Turner, Martin
10.1981 0
11.1981 1 --> King
12 rows selected.
SQL>