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)
您可以使用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)
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |