sql - 在最近的日期加入 [Amazon Redshift]
问题描述
我正在尝试通过相同的用户 ID 对 Event_1 和 Event_2 进行左连接并到最大的前一个日期。
事件_1
| timestamp | user_id | n_trigg |
|-------------------------|---------|---------|
| 2021-04-24 15:39:51.667 | 1213 | 1 |
| 2021-04-24 15:40:13.631 | 1213 | 2 |
| 2021-04-24 18:51:22.651 | 1213 | 3 |
Event_2(在 Event_1 之后发生)
| timestamp | user_id | product_id |
|-----------------------|---------|------------|
|2021-04-24 15:39:56.483| 1213 | 11313 |
|2021-04-24 15:40:14.775| 1213 | 11313 |
我想得到以下结果:
时间戳_事件_1 | 用户身份 | n_trigg | 时间戳_事件_2 | product_id |
---|---|---|---|---|
2021-04-24 15:39:51.667 | 1213 | 1 | 2021-04-24 15:39:56.483 | 11313 |
2021-04-24 15:40:13.631 | 1213 | 2 | 2021-04-24 15:40:14.775 | 11313 |
我已经尝试过了,但它不适用于 Redshift:
SELECT *
FROM Event_1 LEFT JOIN Event_2 ON Event_1.user_id = Event_2.user_id
AND Event_2.timestamp = (select min(timestamp) from Event_2
where Event_2.user_id=Event_1.user_id
and Event_2.timestamp > Event_1.timestamp)
但我收到以下错误:
ERROR: This type of correlated subquery pattern is not supported yet
非常感谢您提前。使用红移 1.0.29551
解决方案
正如错误消息所说,Redshift 不支持这种类型的相关子查询。因此,您需要将其重写为 JOIN 。如果这些表很大,请小心进行不等式连接,因为这可能导致数据爆炸。如果发生这种情况,有一些 UNION 和窗口技术可以帮助您解决这个问题。
推荐阅读
- automated-tests - 使用 gherkins 和 flutter_driver 调试自动化测试代码时出现编译器错误(消息)
- sql-server - “状态:Failur-I/O 错误:SSO 失败:未加载本机 SSPI 库。检查 java.library.path 系统属性。” SQL 开发人员
- javascript - 在不更改条件的情况下根据状态更改重新渲染条件
- javascript - 存储基本身份验证密码的最佳做法是什么?
- sql - Oracle Application Express 在提交文本字段时给出 ORA-06502
- apache - 使用 wsgi 部署时,绘图不从 sqlite db 加载
- python - Python - 无法匹配列表中的值
- ios - 无法推断通用参数“T” Xcode 11 iOS 13
- javascript - 当 body 函数进行条件检查时,应该从 useEffect 钩子返回什么?
- search - 如何使用rest api颤振进行搜索功能