1

私は持っている:

表1

ID  date       amt
-------------------    
001 21/01/2012 1200
001 25/02/2012 1400
001 24/03/2012 1500
001 21/04/2012 1000
002 21/03/2012 1200
002 01/01/2012 0500
002 08/09/2012 1000
.....

からDESCでID並べ替えられた各グループから最初の 2 行を選択したいと思います。dateTable1

クエリは次のようになります。

SELECT TOP 2 DATE, ID, AMT FROM TABLE1 GROUP BY ID, AMT --(NOT WORKING)

期待される出力:

ID  date       amt
-------------------
001 21/01/2012 1200
001 25/02/2012 1400
002 21/03/2012 1200
002 01/01/2012 0500

.....
4

1 に答える 1

6

Common table Expressionとを利用することができますWindow Function

WITH recordList
AS
(
    SELECT  ID, DATE, Amt,
            DENSE_RANK() OVER (PARTITION BY ID ORDER BY DATE ASC) rn
    FROM    tableName
)
SELECT  ID, DATE, Amt
FROM    recordList
WHERE   rn <= 2

上記の希望する結果に基づいて、 までに日付を注文していますASCENDING

わかりました、DENSER_RANK()またはのいずれかを使用できますROW_NUMBER()が、私の答えでDENSE_RANK()は、重複を考えているので使用しました。とにかく、ROW_NUMBER()代わりに使用するのは OP の選択ですDENSE_RANK()

于 2013-02-18T04:47:57.263 に答える