SQL Server - 如何从从上到下的数字列表中查询最大数字集

标签 sql sql-server sql-server-2014

最好的解释方法是通过示例。假设我有这个简单的 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

Demo

关于SQL Server - 如何从从上到下的数字列表中查询最大数字集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44323131/

相关文章:

sql - 使用 SQL 计算跨客户的运行计数和运行总计

sql-server - SQL Server 双向事务复制 - 这是一个好的用例吗?

sql-server - SQL Server 2014 禁用所有列属性

java - 控制hibernate sql脚本运行

sql - 确定列是增加还是减少

sql - 用于过滤日期时间变量大于或等于当月第一天的记录的 T-SQL 语法

Mysql 不存在或替代方案

MySQL 正则表达式位于字符串中间

MySQL 从 2 个源表插入到 1 个目标表

java - SQL Server 2014 的 JDBC 驱动程序