You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用T-SQL筛选Runs逐次递增的记录

T-SQL解决方案:筛选逐次递增的赛事得分行

没问题,要解决这个筛选逐次递增得分的需求,咱们可以用T-SQL的窗口函数来轻松实现。首先明确需求:我们要找出所有得分是迄今为止历史最高分的行——也就是每一行的得分都比之前所有行的得分更高,直到出现第一个无法打破之前记录的行,之后的所有行都不再符合条件。

原始数据示例

先把你提供的赛事数据整理成结构化表格更清晰:

RunsNameOppositionGroundDateRN
4WickramanayakeEllerslieDevonport Domain25-26/11/20161
51MahoneyEllerslieDevonport Domain25-26/11/20162
157BeghinEllerslieDevonport Domain25-26/11/20163
10OlsenEllerslieDevonport Domain25-26/11/20164
9ThomsonEllerslieDevonport Domain25-26/11/20165
12ChitongoEllerslieDevonport Domain25-26/11/20166
..................

实现代码

假设你的赛事数据存储在名为MatchScores的表中,我们可以用CTE(公共表表达式)结合窗口函数MAX() OVER()来计算累积最大值,再筛选符合条件的行:

WITH CumulativeMaxScores AS (
    SELECT 
        Runs,
        Name,
        Opposition,
        Ground,
        Date,
        RN,
        -- 计算从第一行到当前行的累积最大得分
        MAX(Runs) OVER (
            ORDER BY RN 
            ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
        ) AS CumulativeMaxRun
    FROM MatchScores
)
SELECT 
    Runs,
    Name,
    Opposition,
    Ground,
    Date,
    RN
FROM CumulativeMaxScores
WHERE Runs = CumulativeMaxRun
ORDER BY RN;

代码解释

  1. 累积最大值计算:MAX(Runs) OVER (...) 会按照RN(得分记录的顺序),逐行计算从第一行到当前行的最大得分值。比如第三行的累积最大值是157,第四行到后续所有行的累积最大值都会保持157,因为没有更高的得分出现。
  2. 筛选条件:WHERE Runs = CumulativeMaxRun 会只保留那些得分等于当前累积最大值的行——也就是每一次打破历史记录的行,正好对应你需要的前三行(4、51、157)。
  3. 排序说明:如果RN不是记录的先后顺序标识,你可以替换成Date或者其他能代表得分出现顺序的字段,确保计算累积最大值的逻辑正确。

执行这段代码后,结果集就会仅包含得分逐次递增的前三行记录。

内容的提问来源于stack exchange,提问作者Blair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:24:39