Цикл SQL по месяцам - PullRequest
       10

Цикл SQL по месяцам

0 голосов
/ 27 мая 2019

В Oracle SQL Developer мне нужно вычислять некоторые цифры (например, считать) с первого дня до сегодняшнего дня ежемесячно.Как я могу создать цикл, изменив месяц в поле даты?Теперь у меня есть временной диапазон для предложения WHERE, например (date> = '2017-01-01' и date <'2019-01-01').Итак, мне нужна таблица, которая рассчитывает месяцы и вставляет результаты в два столбца: month (2019_01, 2019_02 и т. Д.) И count </p>

1 Ответ

0 голосов
/ 27 мая 2019

Вот пример, который может помочь вам сделать то, что нужно. Он основан на образце схемы Скотта, его таблица EMP, которая содержит столбец HIREDATE, который будет присоединен к CTE с именем months; он использует иерархический запрос для создания «календаря» на 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...