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

如何在SQL中按Cat1、Cat2和Month获取所有最大Order值的行?

解决按Cat1、Cat2、Month筛选组内最大Order值行的问题

你的代码问题在于SQL执行顺序限制:WHERE子句的执行优先级高于SELECT子句,因此在WHERE中无法直接引用SELECT里定义的窗口函数别名max_ord(此时max_ord还未被计算)。以下是两种可行的解决方案:

方法一:使用子查询

先在子查询中计算每组的最大Order值,再在外层筛选出Order等于该最大值的行:

SELECT ID, Cat1, Cat2, Month, [Order]
FROM (
    SELECT
        ID,
        Cat1,
        Cat2,
        Month,
        [Order],
        MAX([Order]) OVER (PARTITION BY Cat1, Cat2, Month) AS max_ord
    FROM table
) AS sub_query
WHERE [Order] = max_ord;

方法二:使用RANK()窗口函数

通过排名函数标记组内最大Order的行,再筛选排名为1的记录(支持同组多个最大值的情况):

SELECT ID, Cat1, Cat2, Month, [Order]
FROM (
    SELECT
        ID,
        Cat1,
        Cat2,
        Month,
        [Order],
        RANK() OVER (PARTITION BY Cat1, Cat2, Month ORDER BY [Order] DESC) AS ord_rank
    FROM table
) AS sub_query
WHERE ord_rank = 1;

说明

  • 两种方法都能实现需求:按Cat1、Cat2、Month分组,返回每组中所有Order值等于该组最大值的行。
  • 如果同组内有多个行的Order值相同且都是最大值,两种方法都会保留这些行,不会遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:15:34