3

我有下表:

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的最大值。LADLEID & BLOWNUMBER

需要输出:

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

2 回答 2

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

在此处查看此SQL Fiddle 以获得在线现场演示

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

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

于 2012-11-14T13:24:50.333 回答
0

如果您使用的是 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;
于 2012-11-14T13:53:26.790 回答