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)
会有所帮助。
归档时间: |
|
查看次数: |
5547 次 |
最近记录: |