2017-03-02 60 views
0

我有兩個表,如何獲取最近插入的記錄amoung重複數據

表1

A-ID Name reg.id 
100  shankar 11a 
101  kumar 11b 
102  Raj  11c 

表2

A-ID B-ID Type create date update date 
100  1  mail 03/01/17 03/01/2017 9.10 
100  2  fax  03/01/17 03/01/2017 9.10 
100  3  phone 03/01/17 03/01/2017 9.11 
100  4  phone 03/02/17 03/02/2017 10.00 
100  5  fax  03/02/17 03/02/2017 10.01 
100  6  mail 03/02/17 03/02/2017 10.01 
100  7  phone 03/02/17 03/02/2017 10.02 
101  4  phone 03/02/17 03/02/2017 10.00 
101  5  fax  03/02/17 03/02/2017 10.02 
101  6  mail 03/02/17 03/02/2017 10.03 

此A-ID,外鍵。 「類型」值將在同一天插入多次,但每插入更新的gmts將插入當前時間戳,如本例中的「類型」電話100插入「03/02/2017 10.00」和「 03/02/2017 10.02「。 但我只想在這裏的特定日子的最近插入「03/02/2017 10.02」。這同樣適用於其他「類型」值傳真和電子郵件..但特定日期的最近條目應該只抽出一次?

我想結果一樣,

create date A-ID reg.id Type update date 
03/02/17 100  11a  phone 03/02/2017 10.02 
03/02/17 100  11a  fax  03/02/2017 10.01 
03/02/17 100  11a  mail 03/02/2017 10.01 
03/02/17 101  11b  phone 03/02/2017 10.00 
03/02/17 101  11b  fax 03/02/2017 10.02 
03/02/17 101  11b  mail 03/02/2017 10.03 

請幫我寫上的內部查詢?

+1

是它的mysql/Oracle或DB2? – Utsav

+0

我喜歡Db2 – jcrshankar

+0

適合?你有選擇在任何你想要的數據庫中運行它嗎? – Utsav

回答

0

的Oracle/DB2支持windows功能row_number() over (partition by所以你可以使用

select * from 
(select 
t.*,row_number() over (partition by A-ID,Type order by "update date" desc) rn 
from Table2 t 
) t2 
left join Table1 t1 
on t2.A-ID=T1.A-ID 
where t2.rn=1 
1

select B.[create date] , A.[A-ID] , A.[reg.id] , B.[update date] 
 
    FROM Table1 A 
 
     INNER JOIN Table2 B 
 
      ON A.A-ID = B.A-ID

+0

如何給OP提供的解決方案?他不只是想加入兩張桌子。瞭解預期的結果,然後看看你如何實現它。 – Utsav

0

在本地SQL:

SELECT CREATE_DATE 
     ,A_ID 
     ,REG_ID 
     ,TYPE 
     ,MAX(UPDATE_DATE) 
FROM TABLE_1 A,TABLE_2 B 
WHERE A.A_ID= B.A_ID 
GROUP BY CREATE_DATE 
     ,A_ID 
     ,REG_ID 
     ,TYPE