在 SQL 中选择最大订单号

Posted

技术标签:

【中文标题】在 SQL 中选择最大订单号【英文标题】:Selecting a maximum order number in SQL 【发布时间】:2008-10-06 14:31:09 【问题描述】:

我有一个记录一系列动作的表,其中一个字段记录了顺序:

user    data    sequence
1       foo     0
1       bar     1
1       baz     2
2       foo     0
3       bar     0
3       foo     1

使用 WHERE sequence = '0' 为每个用户选择第一个项目很容易,但是有没有办法在 SQL 中为每个用户选择最后一个项目?

我追求的结果应该是这样的:

user    data    sequence
1       baz     2
2       foo     0
3       foo     1

如果有任何实现特定的骗子回答,我正在使用 mysql

【问题讨论】:

【参考方案1】:

这条sql会为每个用户返回序列值最高的记录:

select a.user, a.data, a.sequence
from table as a
    inner join (
        select user, max(sequence) as 'last'
        from table 
        group by user) as b
    on a.user = b.user and 
       a.sequence = b.last

【讨论】:

嗯,我希望“内部连接(选择用户,max(sequence) 作为用户从表组中的‘最后一个’)作为 a.user = b.user 上的 b”。我猜对这个问题有不同的解释。 epheminent 在技术上是正确的(最好的一种正确)。 啊,你是对的,谢谢。他按用户分组,只显示最后的数据。 在将元变量转换为我的数据时,无论如何我都得到了正确的结果。【参考方案2】:
select top 1 
       user
       ,data
       ,sequence
 from table
order
   by sequence

【讨论】:

这可能是最简单但优雅的解决方案 那只会返回一项。问题是每个用户的最大序列。 Keith 的回答很到位,您需要相关查询来执行此操作吗?

以上是关于在 SQL 中选择最大订单号的主要内容,如果未能解决你的问题,请参考以下文章

如何在特定日期之间在sql中选择我选择的客户订单[重复]

SQL:如何只选择每三周发生一次的订单?

选择作为过滤器的 SQL 更新表

SQL 语句帮助 - 为每个客户选择最新订单

客户和订单 Sql 语句

Oracle SQL:将选择从一个表插入另一个表,其中用户有多个带有订单号的条目