Db2
重複條目 - 第二個表的條件與連接
我有 2 張桌子(1. PLATE,2. MOVEMENT)。第一個表包含一些重複的車牌號。每個車牌號(欄位:PLATE_ID、PLATE_COUNTRY、PLATE_NUMBER)都有一個唯一的 id,它也存在於移動表(欄位:MOV_ID、MOV_ENTRYDATE、MOV_EXITDATE)中。如何找出具有移動日期的所有重複條目,其中第一個條目中的 MOV_EXITDATE = 第二個移動數據中的 MOV_ENTRYDATE。
例子:
PLATE_ID PLATE_NUMBER PLATE_COUNTRY 1 AS25 UK 2 AS25 UK 3 GG10 D 4 GG10 D 5 BB40 I MOV_ID MOV_COUNTRY MOV_ENTRYDATE MOV_EXITDATE 1 GB 2019-03-01 2019-03-05 2 GB 2019-03-05 0001-01-01 3 D 2019-02-01 2019-02-20 4 D 2019-02-21 0001-01-01 5 I 2019-01-01 0001-01-01
結果:
PLATE_ID PLATE_NUMBER PLATE_COUNTRY MOV_ENTRYDATE MOV_EXITDATE 1 AS25 UK 2019-03-01 2019-03-05 2 AS25 UK 2019-03-05 0001-01-01
注意:板 AS25 在表 PLATE 和 MOV_EXITDATE = MOV_ENTRYDATE 中重複。
我在下面的查詢沒有成功。
Select PLATE_ID, PLATE_NUMBER, PLATE_COUNTRY, MOV_ENTRYDATE, MOV_EXITDATE from PLATE t inner join (Select PLATE_ID, PLATE_COUNTRY, count(PLATE_NUMBER) from PLATE group by PLATE_ID, PLATE_COUNTRY having (count(PLATE_NUMBER) > '1')) k on t.PLATE_ID = k.PLATE_ID and t.PLATE_COUNTRY = k.PLATE_COUNTRY inner join (Select MOV_ID, MOV_COUNTRY, MOV_ENTRYDATE, min(MOV_EXITDATE) as minexitdate from MOVEMENT group by MOV_ID, MOV_COUNTRY, MOV_ENTRYDATE) p on t.PLATE_ID = p.MOV_ID and t.PLATE_COUNTRY = p.MOV_COUNTRY inner join (Select MOV_ID, MOV_COUNTRY, MOV_EXITDATE, max(MOV_ENTRYDATE) as maxentrydate from MOVEMENT group by MOV_ID, MOV_COUNTRY, MOV_EXITDATE) p on t.PLATE_ID = p.MOV_ID and t.PLATE_COUNTRY = p.MOV_COUNTRY where minexitdate = maxentrydate
謝謝,每一個有用的提示。
再會。
使用 WITH 語法,您的子查詢可能更具可讀性。
WITH PLATE_MOVEMENT AS ( SELECT P.PLATE_ID, P.PLATE_NUMBER, P.PLATE_COUNTRY, M.MOV_ENTRYDATE, M.MOV_EXITDATE FROM PRUEBA.PLATE P INNER JOIN PRUEBA.MOVEMENT M ON (P.PLATE_ID = M.PLATE_ID) ) SELECT A.PLATE_ID, A.PLATE_NUMBER, A.PLATE_COUNTRY, A.MOV_ENTRYDATE, A.MOV_EXITDATE FROM PLATE_MOVEMENT A INNER JOIN PLATE_MOVEMENT B ON A.PLATE_NUMBER = B.PLATE_NUMBER AND A.PLATE_COUNTRY = B.PLATE_COUNTRY AND (A.MOV_EXITDATE = B.MOV_ENTRYDATE OR B.MOV_EXITDATE = A.MOV_ENTRYDATE) -- optionally an order by ORDER BY A.PLATE_COUNTRY, A.PLATE_NUMBER, A.MOV_ENTRY_DATE
結果
PLATE_ID PLATE_NUMBER PLATE_COUNTRY MOV_ENTRYDATE MOV_EXITDATE ----------- ------------ ------------- ------------- ------------ 1 AS25 UK 03/01/2019 03/05/2019 2 AS25 UK 03/05/2019 01/01/0001 2 record(s) selected.
條件相當模糊
A.MOV_EXITDATE = B.MOV_ENTRYDATE OR B.MOV_EXITDATE = A.MOV_ENTRYDATE
如果省略第二部分,則將省略歷史行的鍊式集合中的最後一行。如果省略第一部分,歷史行的鍊式集合中的第一行將失去。