Sql server 2008 如何使用TSQL获得所需的结果集?
以下是我的表格结构:-Sql server 2008 如何使用TSQL获得所需的结果集?,sql-server-2008,tsql,Sql Server 2008,Tsql,以下是我的表格结构:- Table01 ID Name FkID dateTime 1 John 1 2012-06-01 2 Peter 2 2012-06-02 3 Penny 2 2012-06-03 4 Patty 3 2012-06-01 我尝试了此查询,但:( 我需要FkID的唯一结果,但从重复的FkID中,我需要在最新日期时间提取行。请选择任何指导线。您可以使用行号来实现这一点 WITH A AS (
Table01
ID Name FkID dateTime
1 John 1 2012-06-01
2 Peter 2 2012-06-02
3 Penny 2 2012-06-03
4 Patty 3 2012-06-01
我尝试了此查询,但:(
我需要FkID的唯一结果,但从重复的FkID中,我需要在最新日期时间提取行。请选择任何指导线。您可以使用行号来实现这一点
WITH A AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY FkID ORDER BY dateTime DESC) AS rn
FROM Table01
)
SELECT ID, Name, FkID, dateTime
FROM A
WHERE rn = 1;
我使用了一个通用的表表达式(带语句的
),但是你也可以用普通的子查询来实现。但是实际上,ROW_NUMBER()
在处理分组数据(或者说分区)时是一件好事。你可以通过在表上连接两次来实现这一点
select t1.id, t1.name, t1.dt
from t t1
inner join
(
select fkid, max(dt) as dt
from t
group by fkid
) t2
on t1.fkid = t2.fkid
and t1.dt = t2.dt
order by t1.id
看
WITH A AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY FkID ORDER BY dateTime DESC) AS rn
FROM Table01
)
SELECT ID, Name, FkID, dateTime
FROM A
WHERE rn = 1;
select t1.id, t1.name, t1.dt
from t t1
inner join
(
select fkid, max(dt) as dt
from t
group by fkid
) t2
on t1.fkid = t2.fkid
and t1.dt = t2.dt
order by t1.id