SQL - 为每个匹配给定条件的用户选择最后一个事件

时间:2017-09-13 16:26:17

标签: sql postgresql greatest-n-per-group

我准备了以下我的真实案例的简化示例:SQL Fiddle

很明显,我已经提出了两种获取相同信息的方法,即:每个用户的最新事件集,给出了对事件类型的一些额外限制

两种方式都可以获取有关最新活动的user和时间occurred的信息。但是,我还需要了解该事件的idtype

我将如何得到它?

理想情况下,我希望该解决方案适用于任何SQL数据库,而不仅仅是PostgreSQL。

1 个答案:

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