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

时间:2012-11-14 13:04:33

标签: 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        1
125      2           04/06/2012        1
125      2           01/03/2012        0    

对于TIME组,我希望LADLE的最大值为ID & BLOWNUMBER

需要输出:

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

2 个答案:

答案 0 :(得分:6)

如果您正在使用SQL Server(或支持CTE&{39}和ROW_NUMBER的其他引擎),您可以使用此CTE(公用表表达式)查询:

;WITH CTE AS 
(
   SELECT 
      ID, BlowNumber, [Time],
      RN = ROW_NUMBER() OVER (PARTITION BY ID, BLOWNUMBER ORDER BY [Time] DESC)
   FROM Sample
)
SELECT *
FROM CTE
WHERE RN = 1

请参阅此SQL Fiddle here for an online live demo

这个CTE"分区"您的数据由(ID, BLOWNUMBER)生成,ROW_NUMBER()函数从1开始为每个"分区"分配数字,由[Time]列排序(最新时间)价值第一)。

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

答案 1 :(得分:0)

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

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;