对于具有重复键的行,如何获得最长记录?

Dar*_*owy 0 sql sql-server group-by

给定下表,缺少任何唯一键,如何按ID分组并获得最长的Permissions列?

SampleTable:

id | Permissions
------------------------------------
1  | Walk, Swim
1  | Walk, Sit, Swim, Run, Jump, Lay
1  | !Walk, Sit, Lay
2  | Walk, Sit, Swim
3  | !Walk, Sit, Swim
3  | Walk, Sit, Swim
Run Code Online (Sandbox Code Playgroud)

我试过了:

SELECT r.id, r.Permissions
FROM SampleTable AS r
CROSS APPLY (
    SELECT TOP 1 u.id, u.Permissions
    FROM SampleTable AS u
    GROUP BY u.id, u.Permissions
    HAVING u.id = r.id
    ORDER BY MAX(LEN(Permissions)) DESC
) AS u
Run Code Online (Sandbox Code Playgroud)

但是我没有得到正确的结果。

我正在寻找类似的结果:

id | Permissions
-----------------------------------
1 | Walk, Sit, Swim, Run, Jump, Lay
2 | Walk, Sit, Swim
3 | !Walk, Sit, Swim
Run Code Online (Sandbox Code Playgroud)



编辑:
这已经被回答,谢谢。但顺便说一句,我应该将我的SQL设置为:

SELECT r.id, u.Permissions
FROM SampleTable AS r
CROSS APPLY (
    SELECT TOP 1 u.id, u.Permissions
    FROM SampleTable AS u
    WHERE u.id = r.id
    ORDER BY LEN(Permissions) DESC
) AS u
GROUP BY r.id, u.Permissions
Run Code Online (Sandbox Code Playgroud)

arc*_*123 5

您可以使用row_number()over()。如:

with cte as (
    Select id, Permissions
    row_number() over( partition by id order by LEN(Permissions) desc) as rnum
    from SampleTable
) Select id, Permissions from cte where rnum = 1
Run Code Online (Sandbox Code Playgroud)