0


0

相対コレクションから最新のアイテムを取得する

UserとUserActivityの2つのテーブルを取得しました。

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

簡単に聞こえるかもしれませんが、各ユーザーのUserActivityから最新のエントリを取得する方法がわかりません。

2 回答


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


テーブルが次のようになっていると仮定しましょう:

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