选择GroupBy中的所有值

时间:2013-05-22 09:06:40

标签: sql tsql sql-server-2008-r2

我有一个场景,其中我的表中有三列。 ID(字符串),Desc(字符串)TerminationDate,上次更新日期(时间)。 没有主键,因此可能有多个行具有相同的数据集,但LastUpdate Date将始终不同。 我需要写一个SP,其中我需要获得最新的修改结果(ID,Desc,终止日期)。请参阅下面的示例

ID    Desc    TerminationDate    LastUpdtDt
A     test     01-01-2013        01-01-2013
A     test1     01-03-2013        25-01-2013
A     test     01-01-2013        26-03-2013
B     test     01-01-2011        01-01-2013

The result i shuld get is 
A     test     01-01-2013        26-03-2013
B     test     01-01-2011        01-01-2013

如果您需要更多信息,请与我们联系。

3 个答案:

答案 0 :(得分:1)

SELECT  ID, [DESC], TerminationDate, LastUpdtDt
FROM
        (
            SELECT  ID, [DESC], TerminationDate, LastUpdtDt,
                    ROW_NUMBER() OVER(PARTITION BY ID 
                    ORDER BY LastUpdtDt DESC) rn
            FROM    TableName
        ) ss
WHERE   rn = 1

答案 1 :(得分:1)

您可以使用子查询返回带有max(LastUpdtDt)的行:

select t1.id,
  t1.[desc],
  t1.terminationdate,
  t1.LastUpdtDt
from yt t1
inner join
(
  select max(LastUpdtDt) LastUpdtDt, id
  from yt
  group by id
) t2
  on t1.id = t2.id
  and t1.LastUpdtDt = t2.LastUpdtDt;

请参阅SQL Fiddle with Demo

答案 2 :(得分:0)

SELECT  ID ,
        DESC ,
        TERMINATION_DATE ,
        LAST_UPDATE
FROM    ( SELECT    ID ,
                    DESC ,
                    TERMINATION_DATE ,
                    LAST_UPDATE ,
                    ROW_NUMBER() OVER ( PARTITION BY ID ORDER BY LAST_UPDATE DESC ) SERIAL_ORDER
          FROM      LAST_UPDATE
        ) B
WHERE   SERIAL_ORDER = 1