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

Posted

技术标签:

【中文标题】SQL:从记录中提取最近添加的日期【英文标题】:SQL: Pull Out Most Recent Added Date From Records 【发布时间】:2017-04-03 20:43:21 【问题描述】:

我正在使用 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

【问题讨论】:

【参考方案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:从记录中提取最近添加的日期的主要内容,如果未能解决你的问题,请参考以下文章

如何返回从当前日期开始最近 7 天内添加到数据库的所有记录

从日期中选择特定记录的 SQL 查询

SQL 不根据确切日期提取记录

SQL:如何获取最近的记录

日期后的最近日期

SQL 嵌套查询和使用 MAX 提取最近的事务和/或评论