【问题标题】:Filter SQL Server Records by Latest Date on Every Year按每年的最新日期筛选 SQL Server 记录
【发布时间】:2021-04-22 14:20:51
【问题描述】:

我将如何过滤此 SQL Server 数据库,以便只留下绿色记录,即每个 Customer ID 字段每年的最后记录日期。

【问题讨论】:

  • 欢迎您。请添加您的表结构

标签: sql sql-server database subquery not-exists


【解决方案1】:

如果你想获取行,而不仅仅是日期值,使用ROW_NUMBER() 是一个选项(你只需要使用适当的PARTITON BYORDER BY 子句):

SELECT *
FROM (
   SELECT 
      CustomerId, 
      [Date], 
      ROW_NUMBER() OVER (PARTITION BY CustomerId, YEAR[Date] ORDER BY [Date] DESC) AS Rn
   FROM YourTable 
) t
WHERE Rn = 1

【讨论】:

    【解决方案2】:

    如果你只有两列,那么你可以只使用聚合:

    select customer_id, max(date)
    from t
    group by customer_id, year(date);
    

    【讨论】:

      【解决方案3】:

      要检查一年中的最大日期,您可以编写查询以获取每年不存在的日期(同一年),如下所示:

      SELECT *
      FROM yourtable t1
      WHERE NOT EXISTS
          (SELECT 1
          FROM yourtable t2
          WHERE t1.customerID = t2.customerID
          AND t1.date > t2.date
          AND DATEPART(YEAR, t1) = DATEPART(YEAR, t2))
      

      【讨论】:

        猜你喜欢
        • 2020-08-22
        • 2016-03-04
        • 1970-01-01
        • 2021-06-15
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多