雅典娜/ SQL查询以获得所需的结果

时间:2020-09-09 22:46:24

标签: sql amazon-web-services subquery presto amazon-athena

sample_input_table

user  name  action      date
 1    aaa    view      2020-09-03
 2    bbb    view      2020-09-02
 3    ccc    view      2020-08-28
 4    ddd    view      2020-08-25
 1    aaa    purchase  2020-09-09

我有一个表,其中有很多行,该表看起来像上面。

问题

  1. 我要打印具有purchase动作的行,并且
  2. 同时,执行purchase的用户必须具有执行view操作的行
  3. 同时,该view操作将在purchase_date({{1})和purchase_date-7天(2020-09-09)的日期范围内。

我想在一个sql查询中实现这3点

sample_output

2020-09-02

如果我们从示例输入中看到示例输出

  1. 我们的最终结果只有购买事件
  2. purchased_user在一行中执行了user name action date 1 aaa purchase 2020-09-09 操作
  3. 并且viewview2020-09-09的时间范围内(购买日期,购买日期-7天)

有人可以为此建议一些解决方案吗?

2 个答案:

答案 0 :(得分:2)

您可以使用exists

select t.*
from mytable t
where t.action = 'purchase' and exists (
    select 1
    from mytable t1
    where 
        t1.user = t.user 
        and t1.action = 'view'
        and t1.date >= t.date - interval '7' day
        and t1.date < t.date
    )

答案 1 :(得分:2)

您可以使用窗口功能。假设“购买”是最后一个状态:

web_streams()