Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何使用TSQL获得所需的结果集?_Sql Server 2008_Tsql - Fatal编程技术网

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