【问题标题】:Loop SQL by month按月循环 SQL
【发布时间】:2019-10-12 23:30:09
【问题描述】:

在 Oracle SQL Developer 中,我需要每月计算从第一天到今天的一些数字(例如计数)。如何通过更改日期字段中的月份来创建循环?现在我在 WHERE 子句上有一个时间范围,例如(日期 >= '2017-01-01' 和日期

【问题讨论】:

  • SQL 并没有真正的循环,所以不清楚你在问什么。
  • 一般模式是将日期范围扩展为单个月份的列表(例如,使用分层查询)作为 CTE 或内联视图,然后(外部)将其连接到您的真实数据。但是,如何执行此操作的选项将取决于您的 Oracle 版本。

标签: sql oracle loops date calendar


【解决方案1】:

这里有一个例子可以帮助你做需要的事情。它基于 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>

【讨论】:

  • 我想应该。试一试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
相关资源
最近更新 更多