我有两个表,User和UserActivity。
如何编写一个SQL查询来获取每个用户及其最新活动? UserActivity.UserId引用User.Id。
可能听起来很简单,但我无法弄清楚如何从每个用户的UserActivity获取最新条目。
答案 0 :(得分:0)
试试这个
Select u.*
ua.*
from user u
join useractivity ua on ua.userid = u.userid
join (select userid, max(useractivityid) from useractivity groupy by userid) um
on um.useractivityid = ua.useractivityid
答案 1 :(得分:0)
让我们说你的表是:
UserT( Id, name )
UserActivity( UserId, sessionNumber, activityTimeStamp)
当您说最近的活动时,您正在谈论此用户有活动的最后时刻。
在这种情况下,查询是:
select
UserT.name,
max( activityTimeStamp ) as latestActivity
from
UserT left outer join
UserActivity UA on UA.UserId = UserT.Id
group by
UserT.Id, UserT.name
是的,是一个简单的查询。只有复杂性才是用户分组并获得最大聚合时间。
对回答延迟表示抱歉。我今天有点滞后;)
如果您正在讨论所有活动列,请使用CTE:
;with cte as (
select
UA.*,
ROW_NUMBER() OVER (PARTITION BY UserId ORDER BY activityTimeStamp DESC) as RN,
from
UserActivity UA )
select
UserT.*,
cte.*
from
UserT left outer join
cte on cte.RN = 1 and cte.UserId = UserT.Id