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
我有一个表,其中有很多行,该表看起来像上面。
问题
purchase
动作的行,并且purchase
的用户必须具有执行view
操作的行view
操作将在purchase_date({{1})和purchase_date-7天(2020-09-09
)的日期范围内。我想在一个sql查询中实现这3点
sample_output
2020-09-02
如果我们从示例输入中看到示例输出
user name action date
1 aaa purchase 2020-09-09
操作view
在view
和2020-09-09
的时间范围内(购买日期,购买日期-7天)有人可以为此建议一些解决方案吗?
答案 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()