SQL会在过去5天内为每个用户抓取所有行,并在5天内为每个用户抓取第一行

时间:2019-01-29 21:29:56

标签: sql postgresql

我有一个名为Actions的表。

每个操作都有一个user_idcreated_at和其他一些字段。

我想运行一个sql查询,在该查询中我抓取过去5天内针对每个用户的所有操作以及5天内的第一个操作。

例如: -如果用户在过去5天中没有任何操作,则我不希望该用户退回任何东西。 -如果一个用户在5天之内有1个操作,而另外3个用户有3个操作,则我希望为该用户返回2个操作。 5天之内的一个,其次是其他3天中的最新的。

我无法确定如何编写此SQL查询。这只能是查询,没有过程,也没有应用程序级逻辑。

我如何实现我想要做的事情?

上下文:基本上,如果我运行此报告,则可以看到谁在我的网站上执行操作,并查看他们先前的操作是什么,以及该先前的操作是什么时候。

1 个答案:

答案 0 :(得分:0)

我想你想要

select a.*
from (select a.*, lead(created_at) over (partition by user_id order by created_at) as next_created_at
      from actions a
     ) a
where created_at >= now() - interval '5 day' or
      next_created_at >= now() - interval '5 day';