0
我希望能够按照员工最新项目的生效日期对数据进行分组,包括他们工作的部门和经理。这是一个数据样本。Oracle SQL分区和排名
PROJ_TBL
+-------------+----------+----------------+
| EMPLOYEE_ID | EFF_DATE | EMPL_PROJECT |
+-------------+----------+----------------+
| P1441 | 05/21/11 | IMC |
| P1441 | 09/12/12 | BEEB |
| P1441 | 09/23/12 | PRUD_FIN_SALES |
+-------------+----------+----------------+
EMPLOYEE_TBL
+-------------+--------------+---------+----------+
| EMPLOYEE_ID | PROJECT_MBR | DEPT_NM | EFF_DATE |
+-------------+--------------+---------+----------+
| P1441 | BEN DEENEY | ACCNT | 02/09/08 |
| P1566 | LAURA FIELDS | ACCNT | 05/03/10 |
| P2155 | PAUL DAVEY | ACCNT | 10/03/10 |
| P1441 | BEN DEENEY | SALES | 07/19/12 |
+-------------+--------------+---------+----------+
EMP_DPT_TBL
+-------------+---------------+---------+----------+
| EMPLOYEE_ID | MANAGER | DEPT_NM | EFF_DATE |
+-------------+---------------+---------+----------+
| P1441 | BOB PAISLEY | ACCNT | 02/09/08 |
| P1441 | LINDA HARDY | SALES | 07/19/12 |
+-------------+---------------+---------+----------+
我不是很福美来r使用分区。我希望能够使用它来组合信息以获得当前数据EMPLOYEE_ID
P1441
。所需的输出是:
+-------------+---------+--------------+----------------+
| EMPLOYEE_ID | DEPT_NM | MANAGER | PROJECT |
+-------------+---------+--------------+----------------+
| P1441 | SALES | LINDA HARDY | PRUD_FIN_SALES |
+-------------+---------+--------------+----------------+
我能够得到正确的电流记录各个表,但相结合的结果产生我想要的是有问题的。下面是查询...
-- Current Project
SELECT EMPL_PROJECT,
EMPLOYEE_ID,
EFF_DT
FROM (SELECT EMPL_PROJECT,
EMPLOYEE_ID,
EFF_DT,
RANK() OVER (PARTITION BY EMPLOYEE_ID
ORDER BY EFF_DT DESC) AS rk1
FROM PROJ_TBL) t
WHERE rk1 = 1
-- Current Department
SELECT DEPT_NM,
EMPLOYEE_ID,
EFF_DT
FROM (SELECT DEPT_NM,
EMPLOYEE_ID,
EFF_DT,
RANK() OVER (PARTITION BY EMPLOYEE_ID
ORDER BY EFF_DT DESC) AS rk2
FROM EMPLOYEE_TBL) t
WHERE rk2 = 1
-- Current Manager
SELECT MANAGER,
EMPLOYEE_ID,
EFF_DT
FROM (SELECT MANAGER,
EMPLOYEE_ID,
EFF_DT,
RANK() OVER (PARTITION BY EMPLOYEE_ID
ORDER BY EFF_DT DESC) AS rk3
FROM EMP_DPT_TBL) t
WHERE rk3 = 1
我怎样才能结合到这些使用EMPLOYEE_ID
生成报告一个查询?
完全无关的问题,但你为什么,在'employee_tbl',同时存储员工的ID和他或她的名字?更好的(规范化)设计是将雇员ID作为主键的不同表格(所以不重复!)以及每个ID和雇员的姓名。这实际上被称为“employee_tbl”。那么你作为第二张表显示的是员工分配到不同部门的历史表格;这个历史表应该只有员工ID,而不是名称 - 对部门来说也是一样的(只包括部门ID并且有单独的DEPARTMENTS_TBL)。 – mathguy