最好的解释方法是通过示例。假设我有这个简单的 2 列表:
Id | Score
1 | 10
2 | 5
3 | 20
4 | 15
5 | 20
6 | 25
7 | 30
8 | 30
9 | 10
10 | 40
查询应返回最高分发生变化的每个项目的 ID。因此,从顶部开始,10 将是最高分,因为第 1 项第一次有 10 分,但随后在第 3 项上它有 20 分,所以它只有一个新的最高分,并且一直持续到表格底部。所以最终,查询将导致:
1, 3, 6, 7, 10
我尝试做 Cursor并循环遍历表格,但我想知道是否有一种更简单的方法可以做到这一点。
谢谢
最佳答案
解决方案(SQL2012+):
SELECT v.MaxScore, MIN(v.Id) AS FirstId
FROM (
SELECT *, MAX(t.Score) OVER(ORDER BY t.Id ASC) AS MaxScore
FROM @Table AS t
) v
GROUP BY v.MaxScore
关于SQL Server - 如何从从上到下的数字列表中查询最大数字集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44323131/