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

如何在SQL中获取各订单号的最大序列号(不使用游标)

解决方案

先明确下你的输入数据:

Order No seq Sta
--------------------
32100    1  rd
32100    3  rd
23600    1  rd
23600    6  rd

要实现每个Order No取最大seq的记录,且不用游标,这里有两种实用的方法:

方法一:GROUP BY + 子查询关联

这种方法兼容性拉满,几乎所有SQL数据库都支持。思路很简单:先分组找出每个订单的最大seq,再和原表关联,拿到对应最大seq的Sta值(就算同一订单的Sta有不同,也能精准匹配到最大seq对应的那条)。

SELECT t1.[Order No], t1.seq, t1.Sta
FROM YourTable t1
INNER JOIN (
    -- 先获取每个Order No的最大seq值
    SELECT [Order No], MAX(seq) AS max_seq
    FROM YourTable
    GROUP BY [Order No]
) t2 ON t1.[Order No] = t2.[Order No] AND t1.seq = t2.max_seq;

方法二:窗口函数ROW_NUMBER()

如果你的数据库支持窗口函数(比如SQL Server 2008+、MySQL 8.0+、PostgreSQL、Oracle等),这种写法更简洁直观。我们给每个订单的记录按seq降序排名,取排名为1的那条,就是对应最大seq的记录。

WITH RankedOrders AS (
    SELECT 
        [Order No], 
        seq, 
        Sta,
        -- 按Order No分组,seq降序排序,第一条就是最大seq的记录
        ROW_NUMBER() OVER(PARTITION BY [Order No] ORDER BY seq DESC) AS rn
    FROM YourTable
)
SELECT [Order No], seq, Sta
FROM RankedOrders
WHERE rn = 1;

两种方法都完全避开了游标,效率比游标高得多——尤其是数据量大的时候优势更明显。老版本数据库选方法一稳,新版本数据库用方法二更优雅。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:33:02