我有一個查詢要查找員工的地址詳細資訊
Person_number country town/city start_Date end_date
--------------------------------------------------------------------------------
10 CA Toronto 01-feb-2022 10-feb-2022
10 CA Ottawa 11-feb-2022 31-dec-4712
11 CA Toronto 10-feb-2022 31-dec-4712
12 AB Greenvilee 15-feb-2022 20-feb-2022
12 AB Portvilee 21-feb-2022 31-dec-4712
13 CA North york 01-feb-2022 09-feb-2022
13 CA Waterloo 10-feb-2022 31-dec-4712
我想創建一個查詢,僅獲取那些城鎮/城市值在引數日期內發生變化的員工的資料。
例如:如果我將引數 date 傳遞為 01-feb-17-feb 2022,我應該得到以下輸出:
Person_number country current_town previous_town effective_date_ofchange
10 CA Toronto Ottawa 11-feb-2022
13 CA North york Waterloo 10-feb-2022
11 號人不會來,因為日期內沒有變化。Person#12 不會出現,因為更改是在引數日期之后。
這可以通過任何分析功能來實作嗎?
uj5u.com熱心網友回復:
這是一種方法,使用LAG視窗函式:
小提琴
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';
WITH xdata (person_number, country, town_city, start_date, end_date) AS (
SELECT 10, 'CA', 'Toronto' , '01-feb-2022', '10-feb-2022' FROM dual UNION
SELECT 10, 'CA', 'Ottawa' , '11-feb-2022', '31-dec-4712' FROM dual UNION
SELECT 11, 'CA', 'Toronto' , '10-feb-2022', '31-dec-4712' FROM dual UNION
SELECT 12, 'AB', 'Greenvilee', '15-feb-2022', '20-feb-2022' FROM dual UNION
SELECT 12, 'AB', 'Portvilee' , '21-feb-2022', '31-dec-4712' FROM dual UNION
SELECT 13, 'CA', 'North york', '01-feb-2022', '09-feb-2022' FROM dual UNION
SELECT 13, 'CA', 'Waterloo' , '10-feb-2022', '31-dec-4712' FROM dual
)
, xtable (person_number, country, town_city, start_date, end_date) AS (
SELECT person_number, country, town_city
, to_date(start_date, 'DD-MON-YYYY')
, to_date(end_date, 'DD-MON-YYYY')
FROM xdata
)
, table2 (person_number, country, current_town, prev_town, start_date) AS (
SELECT person_number, country, town_city
, LAG(town_city) OVER (PARTITION BY person_number ORDER BY start_date)
, start_date
FROM xtable
)
SELECT * FROM table2
WHERE current_town <> prev_town
AND start_date BETWEEN DATE'2022-02-01' AND DATE'2022-02-17'
;
LAG(x) OVER (PARTITION BY person_number ORDER BY start_date)
x這會根據start_date順序獲得對應人的每一行的先驗。
結果:
| PERSON_NUMBER | 國家 | CURRENT_TOWN | PREV_TOWN | 開始日期 |
|---|---|---|---|---|
| 10 | 加州 | 渥太華 | 多倫多 | 2022 年 2 月 11 日 |
| 13 | 加州 | 滑鐵盧 | 北約克 | 2022 年 2 月 10 日 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/430685.html
下一篇:根據oracle查詢查找一組記錄
