【发布时间】:2021-04-22 14:20:51
【问题描述】:
我将如何过滤此 SQL Server 数据库,以便只留下绿色记录,即每个 Customer ID 字段每年的最后记录日期。
【问题讨论】:
-
欢迎您。请添加您的表结构
标签: sql sql-server database subquery not-exists
我将如何过滤此 SQL Server 数据库,以便只留下绿色记录,即每个 Customer ID 字段每年的最后记录日期。
【问题讨论】:
标签: sql sql-server database subquery not-exists
如果你想获取行,而不仅仅是日期值,使用ROW_NUMBER() 是一个选项(你只需要使用适当的PARTITON BY 和ORDER 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
【讨论】:
如果你只有两列,那么你可以只使用聚合:
select customer_id, max(date)
from t
group by customer_id, year(date);
【讨论】:
要检查一年中的最大日期,您可以编写查询以获取每年不存在的日期(同一年),如下所示:
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))
【讨论】: