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

SQL如何查询每个订单对应最大Ship_num的所有行数据

问题原因

你原来的SQL写法逻辑有问题:你将item_code、qty_to_pick等非分组维度字段都加入了GROUP BY,相当于按照所有字段的组合拆分分组,取到的max(ship_num)只是每个拆分后小分组的最大值,而非每个Order_ID维度下的全局最大Ship_num,自然得不到正确结果。

正确实现方案

提供两种主流兼容的写法,你可以根据自己使用的数据库选择:

方案1:子查询关联(兼容所有主流数据库)

先通过子查询查出每个Order_ID对应的最大Ship_num,再关联回原表匹配所有对应行:

SELECT t1.*
FROM table1 t1
INNER JOIN (
    SELECT Order_ID, MAX(Ship_num) AS max_ship_num
    FROM table1
    GROUP BY Order_ID
) t2 
ON t1.Order_ID = t2.Order_ID AND t1.Ship_num = t2.max_ship_num

方案2:窗口函数(支持MySQL8.0+、PostgreSQL、SQL Server 2008+、Oracle等新版本数据库)

用RANK窗口函数给每个Order_ID下的行按Ship_num倒序排名,筛选出排名为1的所有行即可:

WITH ranked_table AS (
    SELECT *,
        RANK() OVER(PARTITION BY Order_ID ORDER BY Ship_num DESC) AS rank_num
    FROM table1
)
SELECT Order_ID, Ship_num, Item_code, Qty_to_pick, Qty_picked, Pick_date
FROM ranked_table
WHERE rank_num = 1

这里用RANK而非ROW_NUMBER是为了适配同一个Order_ID存在多个相同最大Ship_num的场景,确保所有符合条件的行都能被筛选出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:30:04