2015-11-05 98 views
0

我已经得到了下表,并且需要一个查询来产生预期的结果。如何从表中选择最近的记录全部重复

**Table** 
    Address Num My_Date 
Address1 7777 03/NOV/15 
Address2 2222 02/NOV/15 
Address2 3333 02/NOV/15 
Address2 2222 05/NOV/15 
Address2 3333 05/NOV/15 
Address3 8888 01/NOV/15 
Address4 9999 04/NOV/15 

预期结果

Address Num My_Date 
Address1 7777 03/NOV/15 
Address2 2222 05/NOV/15 
Address2 3333 05/NOV/15 
Address3 8888 01/NOV/15 
Address4 9999 04/NOV/15 

正如你所看到的,我要带回所有的记录,如果有重复的带来的只有那些最近记录My_Date

+0

请问您的数据只有三列,还是有你想带回附加列? –

+0

嗨戈登,我需要添加额外的领域,通过在num字段后面添加这些字段作为普通字段定义和group by子句的一部分来解决这个问题,这是正确的方法吗? – Tikkaty

回答

4

要么做一个GROUP BY

select address, num, max(date) 
from tablename 
group by address, num 

还是一个NOT EXISTS

select * 
from tablename t1 
where not exists (select 1 from tablename t2 
        where t2.address = t1.address 
        and t2.num = t1.num 
        and t2.date > t1.date) 

在ANSI SQL日期是一个保​​留字,所以也许你需要将它双引号作为分隔标识符,即"date"

2

您还可以使用下面的查询来获取üR必须O/P

select "Address","Num","Date" 
from 
(
select "Address","Num","Date",rank() over(partition by "Address" order by "Date" desc) r_no from table_name 
) 
where r_no=1 
+0

鉴于OP的评论,这似乎是正确的解决方案(尽管我会使用'row_number()'而不是'rank()'来确保每个地址只有一行被选中)。 –

相关问题