1

我有一个表 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

任何想法?

4

1 回答 1

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
于 2013-03-21T14:51:54.743 回答