sql - 查找每行给定时间之前的最后一个事件
问题描述
我有两张桌子。
搜索:
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)
但这不起作用。
解决方案
一种方法使用 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;
推荐阅读
- c++ - 为什么 c++ 单例不能新,尽管“新”已被覆盖
- json - 读取 Perl JSON 结构
- sql - 增量销售产出
- reactjs - react-router:在 url 更新程序之后不渲染组件
- javascript - 创建自定义错误超类是否正确?
- typescript - Firebase:如何使用 UserCredential 重新进行身份验证
- wordpress - Apache 内存不足并以 1GB 的 RAM 重新启动
- google-app-maker - 从 appmaker 中的全名目录获取电子邮件地址
- java - 混淆 Java 蚂蚁大战
- xampp - 如何修复 xampp apache 在 Windows 7 上复制 php_pthreads.dll 后无法运行