获取汇总行的 ID

Ban*_*San 5 sql-server aggregate t-sql greatest-n-per-group

我有以下查询来获取与最新日期对应的值:

SELECT MAX(RowAddedDate), X, Y
FROM dbo.MyTable
GROUP BY X, Y
Run Code Online (Sandbox Code Playgroud)

这很好,但我需要获取此查询中每一行的 ID。如果我添加 ID,我会得到所有内容,因为 ID 需要在GROUP BY.

我该如何解决这个问题?

ype*_*eᵀᴹ 10

您可以使用窗口(排名)。功能:

WITH ct AS
  ( SELECT X, Y, RowAddedDate, ID,
           Rn = DENSE_RANK() OVER (PARTITION BY X, Y
                                   ORDER BY RowAddedDate DESC)
    FROM dbo.MyTable
  )
sELECT X, Y, RowAddedDate, ID
FROM ct 
WHERE Rn = 1 ;
Run Code Online (Sandbox Code Playgroud)

如果多行具有相同 X 和 Y 的相同日期,由于DENSE_RANK().

如果您只需要一个,您可以将其替换为ROW_NUMBER()并调整ORDER BY以控制将返回哪些绑定行。

至于效率,索引(X, Y, RowAddedDate) INCLUDE (ID)会有所帮助。