首页 > 解决方案 > 查找每行给定时间之前的最后一个事件

问题描述

我有两张桌子。

搜索:

user | eventtime
a    | 25/02/19 00:00
a    | 25/02/19 00:03
a    | 25/02/19 00:05
b    | 25/02/19 00:00
b    | 25/02/19 00:04
b    | 25/02/19 00:07

详情点击:

user | eventtime
a    | 25/02/19 00:04
b    | 25/02/19 00:04
b    | 25/02/19 00:05

现在,对于详细命中的每个条目,我想将其与其搜索时间映射,这是该用户在详细命中时间之前或之前的最后一次搜索。

所以输出就像

user | eventtime      | searchtime
a    | 25/02/19 00:04 | 25/02/19 00:03
b    | 25/02/19 00:04 | 25/02/19 00:04
b    | 25/02/19 00:05 | 25/02/19 00:04

到目前为止,我已经尝试过

select user, detail_hits.eventtime, 
max(searches.eventtime) over(partition by user)
from detail_hits
left join searches using(user)

但这不起作用。

标签: sqlamazon-redshift

解决方案


一种方法使用 aleft join和聚合:

select dh.user, dh.eventtime, max(s.eventtime) as searchtime
from detail_hits dh left join
     searches s
     on dh.user = s.user and s.eventtime < dh.eventtime
group by dh.user, dh.eventtime;

推荐阅读