Gop*_*pal 1 sql t-sql sql-server sql-server-2005 greatest-n-per-group
我有:
表格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
.....
Run Code Online (Sandbox Code Playgroud)
我想从DESC 中ID排序的每组中选择前两行.dateTable1
查询看起来像这样:
SELECT TOP 2 DATE, ID, AMT FROM TABLE1 GROUP BY ID, AMT --(NOT WORKING)
Run Code Online (Sandbox Code Playgroud)
预期产量:
ID date amt
-------------------
001 21/01/2012 1200
001 25/02/2012 1400
002 21/03/2012 1200
002 01/01/2012 0500
.....
Run Code Online (Sandbox Code Playgroud)
你可以利用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
Run Code Online (Sandbox Code Playgroud)
根据您上面所需的结果,您需要订购日期ASCENDING.
好的,您可以使用DENSER_RANK()或者ROW_NUMBER()在我的回答中,我已经使用过,DENSE_RANK()因为我正在考虑重复.无论如何,它是OP的选择ROW_NUMBER()而不是使用DENSE_RANK().