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

如何查询各tfgroup分组中RankOfTime最大值对应的完整数据行?

问题原因分析

你的原始SQL缺少RankOfTime最大值匹配逻辑,仅通过GROUP BY+TOP 3的写法只能返回任意分组前3条结果,无法保证匹配每个tfgroup分组下RankOfTime最大的行,因此结果不符合预期。

修正后的SQL方案

通用窗口函数写法(支持SQL Server、MySQL 8.0+、PostgreSQL、Oracle等主流数据库)

SELECT tfgroup, City, activeDTTM, Begin_time, End_time, RankOfTime
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY tfgroup ORDER BY RankOfTime DESC) AS group_rank
    FROM timeFramesDetail
) temp
WHERE group_rank = 1;

逻辑说明:

  • 内层查询使用ROW_NUMBER()窗口函数,按tfgroup分组后,每组内按RankOfTime倒序排序,每组内排序为1的就是RankOfTime最大的行
  • 外层过滤出group_rank = 1的行,即可取出所有tfgroup分组下符合要求的完整行,不需要手动限制返回条数

低版本MySQL兼容写法(不支持窗口函数场景)

SELECT a.*
FROM timeFramesDetail a
INNER JOIN (
    SELECT tfgroup, MAX(RankOfTime) AS max_RankOfTime
    FROM timeFramesDetail
    GROUP BY tfgroup
) b ON a.tfgroup = b.tfgroup AND a.RankOfTime = b.max_RankOfTime;
输出结果匹配

执行上述语句后,返回结果完全匹配预期:

  • tfgroup=2 对应 RankOfTime=2的完整行
  • tfgroup=3 对应 RankOfTime=4的完整行
  • tfgroup=4 对应 RankOfTime=8的完整行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:15:02