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
.....

我想从DESCID排序的每组中选择前两行。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 ExpressionWindow 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()因为我正在考虑重复项。无论如何,使用 OPROW_NUMBER()代替DENSE_RANK().

于 2013-02-18T04:47:57.263 回答