我有一个表t1(id,source,info,contact_date),id和source是主键,例如
id source info contact_date
01 s1 … 2013-3-1
01 s2 … 2013-3-1
01 s3 … 2013-2-28
…
我想写一个查询,结果表就像
id source info contact_date
01 s1 … 2013-3-1
或
id source info contact_date
01 s2 … 2013-3-1
您可能建议将主键更改为id和contact_date,但我不能,我必须保留原始设计。目前我有以下查询
select
t1.id, t1.source, t1.info, t1.contact_date
from t1
join
(select id, max(contact_date) as contact_date
from t1
group by id) t2 on t1.id = t2.id and t1.contact_date = t2.contact_date
但是结果表在下面并不是我想要的。
id source info contact_date
01 s1 … 2013-3-1
01 s2 … 2013-3-1
有什么想法吗?
答案 0 :(得分:1)
您可以在此使用Ranking Function
。
SELECT id, source, info, contact_date
FROM
(
SELECT id, source, info, contact_date,
ROW_NUMBER() OVER
(PARTITION BY ID
ORDER BY contact_date DESC) rn
FROM t1
) x
WHERE rn = 1