【问题标题】:SQL: Pull Out Most Recent Added Date From RecordsSQL:从记录中提取最近添加的日期
【发布时间】: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

【问题讨论】:

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


    【解决方案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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-22
        • 1970-01-01
        • 2015-11-05
        相关资源
        最近更新 更多