Oracle データベースに、従業員の記録に関連するいくつかのテーブルがあります。これらの各テーブルにはEMPLOYEE_ID
、LAST_UPDATED_DT
との 3 つの同様の列が含まれています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
先週テーブルに従業員レコードを追加し、1 週間後に 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
助けていただければ幸いです。