SQL查询以获取另一列的值,该值对应于基于group by的列的最大值

SQL查询以获取另一列的值,该值对应于基于group by的列的最大值,sql,group-by,max,Sql,Group By,Max,我有下表: ID BLOWNUMBER TIME LADLE --- ---------- ---------- ----- 124 1 01/01/2012 2 124 1 02/02/2012 1 124 1 03/02/2012 0 124 2 04/01/2012

我有下表:

ID     BLOWNUMBER    TIME            LADLE
---    ----------    ----------      -----
124      1           01/01/2012        2
124      1           02/02/2012        1
124      1           03/02/2012        0
124      2           04/01/2012        1
125      2           04/06/2012        1
125      2           01/03/2012        0    
对于一组
ID&BLOWNUMBER
,我想获得
时间
作为
钢包的最大值

所需输出:

124        1       01/01/2012
124        2       04/01/2012
125        2       04/06/2012

如果您使用的是SQL Server(或其他支持CTE和
行号
)的引擎),则可以使用此CTE(公共表表达式)查询:

看这个

此CTE通过
(ID,BLOWNUMBER)
对数据进行“分区”,并且
ROW_NUMBER()
函数从1开始为每个“分区”分配数字,按
[Time]
列排序(首先是最新的时间值)

然后,您只需从该CTE中选择,并使用
RN=1
获取每个数据分区的最新数据。

如果您使用的是sqllite(可能也与其他数据库兼容);你可以做:

select 
    ct.id
    , ct.blownumber
    , time 
from 
    new 
    , (
        select 
            id
            , blownumber
            , max(ladle) as ldl 
        from 
            new 
        group by 
            id
            , blownumber
    ) ct
where 
    ct.id = new.id
    and ct.blownumber = new.blownumber
    and ct.ldl = new.ladle;

TIME
列看起来非常像日期(而不是时间…)SQL只是结构化查询语言-许多数据库系统使用的一种语言,但不是数据库产品。。。像这样的东西可能非常特定于供应商-所以我们真的需要知道您使用的是什么数据库系统(以及哪个版本)…这是一个家庭作业问题吗?为什么不使用内部查询呢?
select 
    ct.id
    , ct.blownumber
    , time 
from 
    new 
    , (
        select 
            id
            , blownumber
            , max(ladle) as ldl 
        from 
            new 
        group by 
            id
            , blownumber
    ) ct
where 
    ct.id = new.id
    and ct.blownumber = new.blownumber
    and ct.ldl = new.ladle;