选择具有最新CreatedDate的行

时间:2017-11-27 08:35:50

标签: sql-server sql-server-2014

我有一个表(SQL Server 2014中包含以下列:

Type   ProjectNr    CreatedDate   Subject    Body
------------------------------------------------------------------------
101    1000         31-01-2017    12345      Lorem ipsum dolor sit amet
104    1000         31-01-2017    23456      Lorem ipsum dolor sit amet
109    1000         31-01-2017    34567      Lorem ipsum dolor sit amet
109    1000         31-09-2017    45678      Lorem ipsum dolor sit amet
109    1000         31-11-2017    56789      Lorem ipsum dolor sit amet
109    1001         31-10-2017    67890      Lorem ipsum dolor sit amet

我只需要所有类型" 109"使用每个ProjectNr的最新CreateDate

这是必要的结果:

 Type   ProjectNr    CreatedDate   Subject    Body
 -----------------------------------------------------------------------
 109    1000         31-11-2017    56789      Lorem ipsum dolor sit amet
 109    1001         31-10-2017    67890      Lorem ipsum dolor sit amet

行的排序不是必需的

2 个答案:

答案 0 :(得分:1)

使用dense_rankrow_number函数为每个行组提供一个行号,按TypeProjectNr / {降序排列} CreatedDate列。然后选择行号为1的行。

<强>查询

;with cte as(
    select [rn] = dense_rank() over(
         partition by [Type], [ProjectNr]
         order by [CreatedDate] desc
    ), *
    from [your_table_name]
    where [Type] = 109
)
select [Type], [ProjectNr], [CreatedDate], [Subject], [Body]
from cte
where [rn] = 1;

答案 1 :(得分:0)

where type = 109 and createddate = MAX(CreatedDate) GROUP BY projectnr
相关问题