如何在SQL中获取最大序列号

如何在SQL中获取最大序列号,sql,Sql,这是我表中的数据。我想要的是每个订单号的最大序列号 Order No seq Sta -------------------- 32100 1 rd 32100 3 rd 23600 1 rd 23600 6 rd 我想在不使用游标的情况下得到以下结果 输出: Order No seq Sta ----------------- 32100 3 rd 23600 6 rd 最简单的解决方案是使用g

这是我表中的数据。我想要的是每个订单号的最大序列号

Order No seq    Sta
--------------------
32100     1     rd
32100     3     rd
23600     1     rd
23600     6     rd
我想在不使用游标的情况下得到以下结果

输出:

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

最简单的解决方案是使用
groupby
max

尝试一下:

select [Order No], max(seq), Sta
from myTable
group by [Order No]

最简单的解决方案是使用
groupby
max

尝试一下:

select [Order No], max(seq), Sta
from myTable
group by [Order No]

只需使用“按订单编号分组”和“按顺序描述”即可获得记录。

只需使用“按订单编号分组”和“按顺序描述”即可获得记录。

如果需要完整的记录,可以使用
行号

SELECT *
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY Order ORDER BY No_Seq DESC) AS rn
      FROM tab) s
WHERE rn = 1;


请不要在列名中使用诸如
Order
和空格之类的关键字。

如果您想要完整的记录,可以使用
行号

SELECT *
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY Order ORDER BY No_Seq DESC) AS rn
      FROM tab) s
WHERE rn = 1;


请不要在列名中使用诸如
Order
和空格之类的关键字。

如果您使用的是Oracle数据库,则可以使用ROW_NUMBER()分析函数来实现此结果

请尝试以下查询:

select 
    * 
from
    (select 
         ROW_NUMBER() OVER (PARTITION BY order_no ORDER BY seq DESC) as "ROW_NUM", 
         order_no, seq, sta
     from 
         Order_Details) temp 
where 
    temp.row_num = 1 ;

如果您使用的是Oracle数据库,则可以使用行数()分析函数来实现此结果

请尝试以下查询:

select 
    * 
from
    (select 
         ROW_NUMBER() OVER (PARTITION BY order_no ORDER BY seq DESC) as "ROW_NUM", 
         order_no, seq, sta
     from 
         Order_Details) temp 
where 
    temp.row_num = 1 ;

以下可能是大多数数据库中最有效的解决方案(具有正确的索引):

您也可以通过
分组方式
执行此操作:

select orderno, max(seq), sta
from t
group by orderno, sta;

请注意,
select
中引用的所有列都是
groupby
键或聚合函数的参数。这是正确的SQL。

以下可能是大多数数据库中最有效的解决方案(具有正确的索引):

您也可以通过
分组方式
执行此操作:

select orderno, max(seq), sta
from t
group by orderno, sta;

请注意,
select
中引用的所有列都是
groupby
键或聚合函数的参数。这是正确的SQL。

请将您的问题添加到您正在使用的数据库引擎(MySQL、Postgres、SQL Server、DB2、Oracle等)的标记中。您正在使用哪个数据库引擎?每个
订单号
Sta是否唯一?请将您的问题添加到您正在使用的数据库引擎的标记中(MySQL、Postgres、SQL Server、DB2、Oracle等)您使用的是哪种数据库引擎?
Sta
根据
Order No
是唯一的吗?这在大多数RDBMS上不起作用。
Sta
没有agg函数,也不在group by中。@Gowdam…遗憾的是,您接受了一个不是标准SQL的答案,在少数数据库中有效,并且推广了糟糕的编程实践。这在大多数RDBMS上都不起作用RDBMSes.
Sta
没有agg函数,也不在group by中。@Gowdam…遗憾的是,您接受了一个不符合标准SQL、在少数数据库中工作、并助长了糟糕的编程实践的答案。