我在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小提琴來證明我的問題:
http://sqlfiddle.com/#!2/3b0e2/4
我很感激任何幫助。
「LIMIT」在Oracle中不能工作...... –
是的,我剛剛意識到他在使用Oracle。當我去SQL Fiddle的例子,它默認爲MySQL,所以我去了那條路線。我認爲你的回答是一個很好的答案。也許在UNION子查詢中的每個查詢中輸入條件** WHERE employee_id = 1 **。 – mtwaddell
「FIRST_VALUE」的+1。無論如何,當您選擇最新的日期時,我會將'UNION'更改爲'UNION ALL'。而'WHERE employee_id ='可以移出最內層的選擇,所以它只寫一次而不是三次... –