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

SQL查询:使用MIN()+GROUP BY时如何获取对应行的其他列数据?

获取每个ries_cod对应最小indi_cod的完整行数据

下面提供几种可行的SQL写法,适配你的需求:

方法一:窗口函数(推荐,性能更优)

用ROW_NUMBER()给每个ries_cod分组内的行按indi_cod升序编号,取编号为1的行就是对应最小indi_cod的完整记录:

SELECT ries_cod, indi_cod, date, time, level
FROM (
    SELECT 
        ries_cod,
        indi_cod,
        date,
        time,
        level,
        ROW_NUMBER() OVER (PARTITION BY ries_cod ORDER BY indi_cod ASC) AS rn
    FROM `my-project-01-354113.indi_cod.second_step`
) t
WHERE rn = 1
ORDER BY ries_cod;

如果同一个ries_cod下有多个相同的最小indi_cod,ROW_NUMBER()会随机返回其中一行;要是想保留所有最小值对应的行,把ROW_NUMBER()换成RANK()或DENSE_RANK()即可。

方法二:子查询关联

先通过子查询算出每个ries_cod的最小indi_cod,再和原表关联匹配,拿到对应行的其他字段:

SELECT t.ries_cod, t.indi_cod, t.date, t.time, t.level
FROM `my-project-01-354113.indi_cod.second_step` t
INNER JOIN (
    SELECT ries_cod, MIN(indi_cod) AS min_indi_cod
    FROM `my-project-01-354113.indi_cod.second_step`
    GROUP BY ries_cod
) sub ON t.ries_cod = sub.ries_cod AND t.indi_cod = sub.min_indi_cod
ORDER BY t.ries_cod;

这种写法在indi_cod唯一时效果稳定,若存在重复的最小值,会返回所有对应的行。

方法三:聚合函数结合GROUP BY(限特定场景)

如果每个(ries_cod, indi_cod)组合对应的date、time、level是唯一的,可以用BigQuery支持的ANY_VALUE()函数直接获取对应字段:

SELECT 
    ries_cod,
    MIN(indi_cod) AS min_indi_cod,
    ANY_VALUE(date) AS date,
    ANY_VALUE(time) AS time,
    ANY_VALUE(level) AS level
FROM `my-project-01-354113.indi_cod.second_step`
GROUP BY ries_cod
ORDER BY ries_cod;

注意:ANY_VALUE()会返回分组内匹配最小indi_cod的任意一个字段值,只有当数据唯一时才建议使用。

内容的提问来源于stack exchange,提问作者Brenda O.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:24:56