我正在使用SQL Server 2012,我目前正在尝试处理查询,以根据ID最近添加的日期撤回查询中的某些记录。
以下是我在下面的一些示例数据。 3个字段名称为ID
,Description
和Date
。 ID
来自表Detail
。 Description
和Date
来自表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
答案 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;