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

use*_*732 3 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    
Run Code Online (Sandbox Code Playgroud)

我希望得到一组TIME的最大值.LADLEID & BLOWNUMBER

需要输出:

124        1       01/01/2012
124        2       04/01/2012
125        2       04/06/2012
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 6

如果您正在使用SQL Server(或支持CTE的其他引擎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
Run Code Online (Sandbox Code Playgroud)

有关在线现场演示,请参阅此SQL小提琴.

此CTE将数据"分区" (ID, BLOWNUMBER),并且ROW_NUMBER()函数从1开始为每个"分区"分配数字,按[Time]列排序(最新时间值为第一个).

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