我有:
表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
.....
我想从ID
的{{1}} DESC中选择每组date
中的前两行。
查询如下所示:
Table1
预期产出:
SELECT TOP 2 DATE, ID, AMT FROM TABLE1 GROUP BY ID, AMT --(NOT WORKING)
答案 0 :(得分: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()
代替DENSE_RANK()
是OP的选择。