从相对集合中获取最新项目

时间:2011-07-01 13:14:18

标签: sql sql-server

我有两个表,User和UserActivity。

如何编写一个SQL查询来获取每个用户及其最新活动? UserActivity.UserId引用User.Id。

可能听起来很简单,但我无法弄清楚如何从每个用户的UserActivity获取最新条目。

2 个答案:

答案 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