SQL查询,按外键按日期排序前2

Ref*_*din 0 sql sql-server-2005 greatest-n-per-group

我需要一个SQL查询,按PlanDate每个ClientID 返回前两个计划.这是一个表,其中PlanID是PrimaryID,ClientID是一个foreignID.

这是我到目前为止 - >

SELECT *
FROM [dbo].[tblPlan] 
WHERE [PlanID] IN (SELECT TOP (2) PlanID FROM [dbo].[tblPlan] ORDER BY [PlanDate] DESC)
Run Code Online (Sandbox Code Playgroud)

显然,这只返回2条记录,其中我实际上需要最多2条记录ClientID.

Mar*_*ers 5

这可以使用ROW_NUMBER完成:

SELECT PlanId, ClientId, PlanDate FROM (
    SELECT ROW_NUMBER() OVER (PARTITION BY ClientId ORDER BY PlanDate DESC) rn, *
    FROM [dbo].[tblPlan]
) AS T1
WHERE rn <=2
Run Code Online (Sandbox Code Playgroud)

将所需的任何其他列添加到select中以获取这些列.