首页 > 解决方案 > 在最近的日期加入 [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

标签: sqlsubqueryamazon-redshiftcorrelated-subquery

解决方案


正如错误消息所说,Redshift 不支持这种类型的相关子查询。因此,您需要将其重写为 JOIN 。如果这些表很大,请小心进行不等式连接,因为这可能导致数据爆炸。如果发生这种情况,有一些 UNION 和窗口技术可以帮助您解决这个问题。


推荐阅读