Sql server 如何基于非主键的列选择行
我有一个表t1(id、source、info、contact_date),例如id和source是主键Sql server 如何基于非主键的列选择行,sql-server,select,Sql Server,Select,我有一个表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 co
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和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
有什么想法吗?你可以在这上面使用
排名功能
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
您可以在该页面上使用排名功能
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
这是为了确定你的要求。据我所知,您只希望返回来自单个源的记录?你能澄清一下吗?我不关心结果表中的来源是什么,s1或s2都可以。这是为了确定你在问什么。据我所知,您只希望返回来自单个源的记录?你能澄清一下吗?我不在乎结果表中的来源是什么,s1或s2都可以。好好工作,谢谢。好好工作,谢谢。