首先,感谢您的宝贵时间和帮助!
EventId UserId Description
---------------------------------------
2525123547 2 lorem lorem lorem ghfgh
2525123547 2 saddsadddasdsdsdsddsasd
2525123547 5 saddsadddasdsdsdsddsasdgfghfhgh
252 2 saddsadddasdsdsdsddsasd
1454 2 343444434343dffdfdfdfd jfdfjdfj fdjfdj lorem lorem
1522254412 5 dsadadfsffsafasfdsdsdsadsddsaasddd
1555224451 2 sadasdsadasdddsadaddsad
1555224451 2 asdafgewrwerrewrererewrwrerww
我想根据EventId进行不同的操作。我希望看到用户过程的结果如下。还有
EventId的长度必须大于5
For exp where UserId =2
EventId UserId Description
2525123547 2 lorem lorem lorem ghfgh
1555224451 2 sadasdsadasdddsadaddsad
答案 0 :(得分:0)
使用ROW_NUMBER为要返回的行分配1:
with cte as
( select ...
row_number()
over (partition by UserId, EventId -- for each user (if UserId removed from WHERE) & Event
order by whatever_determines_your_result) as rn
from tab
where UserId = 2
and length(EventId) > 5
)
select *
from cte
where rn = 1
答案 1 :(得分:0)
我无法确切理解您的意思,但是从区别的角度来看,您可以考虑这样的查询:
select t2.EventId, t2.UserId, t2.Description
from
(
select t.*, len(t.Description) as l_desc,
row_number() over (partition by EventId order by len(t.Description)) as rn
from tab t
where UserId =2
and len(EventId) > 5
) t2
where rn = 2
order by EventId desc;
EventId UserId Description
---------- ------ ------------------------------
2525123547 2 lorem lorem lorem ghfgh
1555224451 2 asdafgewrwerrewrererewrwrerww
P.S。我对列描述的逻辑一无所知。