Oracle SQL запрос отчета по пользователям отдела - PullRequest
1 голос
/ 25 сентября 2019

У меня есть таблица с несколькими командами отделов, которая записывает количество пользователей.

Строки отдела обновляются каждый день, если в пользователях происходят какие-либо изменения, добавляется новая запись, либо обновляется только последний столбец.Если отделы закроются, он прекратит обновление этой записи.

Я думаю, что получил большую часть отчета, но каким-то образом не смог отобразить достойный отчет.

Требования

  1. Отдел и количество пользователей за 3 месяца (текущий и предыдущие 2 месяца)

- не уверен, могу ли я принять нет.месяцев во время выполнения и запрос может определить требуемые месяцы для отображения.

Имя столбца списка в виде Месяц-ГГГГ

Код:

create table departments   
(
    dept    varchar2(20),
    started date,
    users   number(6),
    row_updated date   
);

insert into departments 
values ('Developer', DATE'2019-09-25', 20, sysdate); 

insert into departments 
values ('Developer', DATE'2019-08-15', 15, sysdate); 

insert into departments 
values ('Developer', DATE'2019-03-03', 10, sysdate); 

insert into departments 
values ('Developer', DATE'2019-03-01', 5, sysdate);

insert into departments 
values ('Manager', DATE'2019-01-01', 3, sysdate);

insert into departments 
values ('HR', DATE'2019-08-15', 6, sysdate);

insert into departments 
values ('HR', DATE'2019-05-01', 3, sysdate);

Таблица:

 Dept        Started      Users  Row_Updated
 ----------  ------------ -----  -------------
 Developer   25-SEP-2019  20     25-SEP-2019
 Developer   15-AUG-2019  15     25-SEP-2019
 Developer   03-MAR-2019  10     25-SEP-2019
 Developer   01-MAR-2019  5      25-SEP-2019
 Manager     01-JAN-2019  3      25-SEP-2019
 HR       15-AUG-2019  5      25-SEP-2019
 HR          01-MAY-2019  3      25-SEP-2019

Отчет: (подсчитывать количество пользователей на каждыймесяц)

 DEPT       JUL-2019  AUG-2019  SEP-2019
 ---------  --------  --------  --------
 Developer  10        15        20
 Manager    3         3         3
 HR         3         5         5

Запрос на сентябрь:

 -- below query will display all departments status as of sept
 SELECT dept, users
 FROM
     (SELECT 
          dept, started, users,
          rank() over partition by dept
          order by started desc) seq
      FROM 
          departments
      WHERE 
          trun(started,'MM') <= add_months(trunc(sysdate, 'MM'), -0)) d
WHERE 
    seq = 1
ORDER BY 
    1

Я использую вышеупомянутый запрос 3 раза с изменением в предложении WHERE, заменяя 0 на 1 и 2 и выбирая все результаты другим выбороми присоединяйтесь.

Выбор из списка 3 раза выглядит не очень хорошо, и если завтра, если нам понадобится 6 месяцев, запрос должен снова измениться.

...