SQL:从记录中提取最近添加的日期
Posted
技术标签:
【中文标题】SQL:从记录中提取最近添加的日期【英文标题】:SQL: Pull Out Most Recent Added Date From Records 【发布时间】:2017-04-03 20:43:21 【问题描述】:我正在使用 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
【问题讨论】:
【参考方案1】:使用 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
【讨论】:
【参考方案2】:你可以使用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;
【讨论】:
以上是关于SQL:从记录中提取最近添加的日期的主要内容,如果未能解决你的问题,请参考以下文章