2011-07-01 4 views
0

私は2つのテーブルUserとUserActivityを取得しました。最新のアイテムを相対コレクションから取得する

各ユーザーをフェッチして最新のアクティビティを取得するSQLクエリを作成するにはどうすればよいですか? UserActivity.UserIdはUser.Idを参照します。

シンプルに聞こえるかもしれませんが、ユーザーごとにUserActivityから最新のエントリを取得する方法を理解できません。あなたは、このユーザーが活性を有することを最後の瞬間について話している最新の活動を言うとき

UserT(Id, name) 
UserActivity(UserId, sessionNumber, activityTimeStamp) 

そして:

答えて

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 
0

ましょうsuposeを試してみてください。この場合

は、クエリは次のとおりです。

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 
関連する問題