代码之家  ›  专栏  ›  技术社区  ›  Terence Chow

SQL在过去5天内为每个用户获取所有行,并在这5天之前为每个用户获取第一行

  •  1
  • Terence Chow  · 技术社区  · 7 年前

    Actions .

    每个动作都有一个 user_id created_at 以及其他一些领域。

    我想运行一个sql查询,获取过去5天内每个用户的所有操作以及这5天之后的第一个操作。

    -如果用户在过去5天内没有任何操作,我不希望为该用户返回任何内容。 -如果一个用户在过去5天内有1个操作,另外3个操作,我希望为该用户返回2个操作。一个是在5天内,然后是其他3天中最近的一天。

    我如何实现我正在努力做的事情?

    背景:基本上,如果我运行此报告,那么我可以看到谁在我的站点上进行了操作,看到他们之前的操作是什么,以及之前的操作是什么时候进行的。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Gordon Linoff    7 年前

    我想你想要:

    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';