我准备了以下我的真实案例的简化示例:SQL Fiddle。
很明显,我已经提出了两种获取相同信息的方法,即:每个用户的最新事件集,给出了对事件类型的一些额外限制。
两种方式都可以获取有关最新活动的user
和时间occurred
的信息。但是,我还需要了解该事件的id
和type
。
我将如何得到它?
理想情况下,我希望该解决方案适用于任何SQL数据库,而不仅仅是PostgreSQL。
答案 0 :(得分:2)
在Postgres中,我会使用distinct on
:
select distinct on (username) e.*
from events e
where type > 0
order by username, "time" desc;
(这不是按时间顺序排列所有用户;这需要另一个子查询。)
对于更通用的解决方案,我会使用row_numbe()
:
select e.*
from (select e.*,
row_number() over (partition by username order by "time" desc) as seqnum
from events e
) e
where seqnum = 1
order by "time" desc