我在 Oracle 数据库中有几个与员工记录相关的表。这些表中的每一个都包含三个相似的列EMPLOYEE_ID
:LAST_UPDATED_DT
和LAST_UPDATED_BY
。
我的目标是为最新更新投影EMPLOYEE_ID
,LAST_UPDATED_DT
和列。LAST_UPDATED_BY
以下是这些列的 DDL:
create table EMPLOYEE
(
EMPLOYEE_ID INT,
NAME VARCHAR(100),
LAST_UPDATED_BY VARCHAR(200),
LAST_UPDATED_DT DATE
);
create table EMPLOYEE_AWARD
(
AWARD_ID INT,
EMPLOYEE_ID INT,
AWARD_NAME VARCHAR(100),
LAST_UPDATED_BY VARCHAR(200),
LAST_UPDATED_DT DATE
);
create table EMPLOYEE_ADDRESS
(
ADDRESS_ID INT,
EMPLOYEE_ID INT,
ADDRESS VARCHAR(100),
LAST_UPDATED_BY VARCHAR(200),
LAST_UPDATED_DT DATE
);
为了进一步解释,如果经理上周在EMPLOYEE
表中添加了一条员工记录,一周后又添加了一个 EMPLOYEE_AWARD,我想检索最近的值LAST_UPDATE_DT
以及相应的LAST_UPDATED_BY
值。
简单地说,我想确定谁对员工记录进行了最新更新(跨越多个表。
我试图将所有这些表联合在一起并选择max(LAST_UPDATED_DT)
,但是我无法弄清楚如何获得正确的值LAST_UPDATED_BY
。
这是我尝试的 SQL:
select employee_id, max(last_updated_dt), last_updated_by from
(
select employee_id, last_updated_dt, last_updated_by from
EMPLOYEE
UNION
select employee_id, last_updated_dt, last_updated_by from
EMPLOYEE_AWARD
UNION
select employee_id, last_updated_dt, last_updated_by from
EMPLOYEE_ADDRESS
)
latest
where employee_id = 1
group by employee_id;
我还创建了一个 SQL Fiddle 来演示我的问题:
http://sqlfiddle.com/#!2/3b0e2/4
我很感激任何帮助。