如何从表中选择最近的记录全部重复
问题描述:
我已经得到了下表,并且需要一个查询来产生预期的结果。如何从表中选择最近的记录全部重复
**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。
答
要么做一个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"
。
答
您还可以使用下面的查询来获取ü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()'来确保每个地址只有一行被选中)。 –
请问您的数据只有三列,还是有你想带回附加列? –
嗨戈登,我需要添加额外的领域,通过在num字段后面添加这些字段作为普通字段定义和group by子句的一部分来解决这个问题,这是正确的方法吗? – Tikkaty