2017-03-02 62 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