【发布时间】:2021-08-08 05:17:42
【问题描述】:
我正在构建一个查询,以通过事件通过平台跟踪用户的生命周期。表 EVENTS 有 3 列 USER_ID、DATE_TIME 和 EVENT_NAME。下面是表格的截图,
我的查询应该返回以下结果(注册事件的第一个时间戳,然后是以下 log_in 事件的立即/下一个时间戳,最后是最终着陆页事件的立即/下一个时间戳),
以下是我的查询,
WITH FIRST_STEP AS
(SELECT
USER_ID,
MIN(CASE WHEN EVENT_NAME = 'registered' THEN DATE_TIME ELSE NULL END) AS REGISTERED_TIMESTAMP
FROM EVENTS
GROUP BY 1
),
SECOND_STEP AS
(SELECT * FROM EVENTS
WHERE EVENT_NAME = 'log_in'
ORDER BY DATE_TIME
),
THIRD_STEP AS
(SELECT * FROM EVENTS
WHERE EVENT_NAME = 'landing_page'
ORDER BY DATE_TIME
)
SELECT
a.USER_ID,
a.REGISTERED_TIMESTAMP,
(SELECT
CASE WHEN b.DATE_TIME >= a.REGISTRATIONS_TIMESTAMP THEN b.DATE_TIME END AS LOG_IN_TIMESTAMP
FROM SECOND_STEP
LIMIT 1
),
(SELECT
CASE WHEN c.DATE_TIME >= LOG_IN_TIMESTAMP THEN c.DATE_TIME END AS LANDING_PAGE_TIMESTAMP
FROM THIRD_STEP
LIMIT 1
)
FROM FIRST_STEP AS a
LEFT JOIN SECOND_STEP AS b ON a.USER_ID = b.USER_ID
LEFT JOIN THIRD_STEP AS c ON b.USER_ID = c.USER_ID;
不幸的是,我在尝试运行查询时收到“SQL 编译错误:无法评估不支持的子查询类型”错误
【问题讨论】:
标签: sql subquery snowflake-cloud-data-platform common-table-expression window-functions