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 (Common Table Expression) クエリを使用できます。

;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 を使用している場合 (おそらく他の DB とも互換性があります); あなたができる:

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 に答える