在我的数据库中,我正在跟踪游戏中每个用户的所有UI事件。我想为每个用户提取最后5个事件。
SELECT usr.id, evt.name, evt.utc_timestamp AS Date
FROM usr
JOIN evt ON usr.id = evt.user_id
ORDER BY Date DESC
LIMIT 5
此查询当然不起作用,因为它只为任何用户检索最近的5个事件。
但我的目标是为每个用户提供一个包含5行的列表。因此,有没有办法迭代我的用户表并为每个用户附加5个最近的事件?
非常感谢!
答案 0 :(得分:1)
如果你的数据库中有窗口函数,你可以这样做:
select
id, name, Date
from (
select
usr.id, evt.name, evt.utc_timestamp as Date,
row_number() over(partition by usr.id ordr by evt.utc_timestamp desc) as rn
from usr
inner join evt on usr.id = evt.user_id
) as A
where rn <= 5
在SQL Server中,可以使用apply:
select
usr.id, evt.name, evt.utc_timestamp as Date
from usr
outer apply (
select top 5 *
from evt
where usr.id = evt.user_id
order by evt.utc_timestamp desc
) as evt