sql - Oracle SQL查询部门用户报表
问题描述
我有一个包含多个部门团队的表,其中记录了用户数量。
部门行每天都会更新,如果用户有任何变化,那么它将添加新条目,否则只会更新 last_updated 列。如果部门关闭,那么它将停止更新该记录。
我想我已经得到了报告的大部分内容,但不知何故无法展示像样的报告。
要求
- 3 个月的部门和用户数量(当前和前 2 个月)
——不知道我能不能接受。运行时的月份数和查询可以确定显示所需的月份。
- 列出列名称为 Month-YYYY
代码:
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
我在 WHERE 子句中更改了上述查询 3 次,将 0 替换为 1 和 2,并使用另一个选择和连接来选择所有结果。
列出选择 3 次看起来不太好,如果明天我们需要 6 个月,那么查询需要再次更改。
解决方案
推荐阅读
- c# - 仅传入电子邮件地址时从 EWS 获取显示名称
- npm - Lerna 不支持顶层依赖?
- ios - NSFetchedResultsController 中的 fetchBatchSize 和缓存被忽略
- javascript - Node.js 中的简单嵌套回调
- ruby-on-rails - Ruby Tokbox API 中 nil:NilClass 的未定义方法“用户”
- python - 目标和输入必须具有相同数量的元素
- java - JSF 需要用另一个结果刷新 Date+days
- kotlin - Kotlin,MediaPlayer:如何使“播放”按钮始终从一开始就播放音乐
- javascript - 从Angular 4发送删除请求中的数组以表达
- angular - 如何在 Typescript 中更改导入对象的值?