SQL:从记录中提取最近添加的日期

时间:2017-04-03 20:43:22

标签: sql sql-server date sql-server-2012 max

我正在使用SQL Server 2012,我目前正在尝试处理查询,以根据ID最近添加的日期撤回查询中的某些记录。

以下是我在下面的一些示例数据。 3个字段名称为IDDescriptionDateID来自表DetailDescriptionDate来自表Trend

ID  Description   Date
57     Used       3/9/13
57      New       1/3/13
58      New       2/4/14
59      New       11/2/16
60      Poor       6/23/15
60      Used       2/4/14

从上表中,我想获取最新日期的ID信息。例如,我应该返回第1行,第3行,第4行和第5行。它应该摆脱第2和第6行。基本上为每个ID返回一行,最近的日期。

这是我目前的代码,我相信我很接近......但不确定哪里出错了。

Code:    

SELECT A.ID, B.Description, CAST(MAX(B.Date) AS DATE)
FROM   Detail A
INNER JOIN Trend B
ON A.TrendID = B.TrendID
GROUP BY A.ID, B.Description
ORDER BY A.ID

2 个答案:

答案 0 :(得分:2)

使用MAX窗口函数获取每个id的最新日期,并仅选择那些行。

select ID, Description, Date
from (SELECT A.ID, B.Description, B.Date, MAX(B.Date) OVER(PARTITION BY A.ID) as max_date
      FROM   Detail A
      INNER JOIN Trend B ON A.TrendID = B.TrendID
     ) t
where Date=max_date

答案 1 :(得分:1)

您可以使用ROW_NUMBER

WITH CTE AS
(
    SELECT A.ID, 
           B.Description, 
           CONVERT(DATE,B.[Date],1) [Date],
           RN = ROW_NUMBER() OVER(PARTITION BY ID
                                  ORDER BY CONVERT(DATE,B.[Date],1) DESC)
)
SELECT *
FROM CTE
WHERE RN = 1;