【发布时间】:2021-06-02 16:59:17
【问题描述】:
我想过滤掉每个idstart_timecreatedstatus 之前有start_time 的记录。
例如在基于start_time 的“创建”之前,低于 ID A 的状态为“失败”。所以需要过滤。
而 id B 首先是“创建”,然后是另一个可接受的状态。
所以预期的结果只是这样,但我正在寻找一种适用于数千行的可扩展解决方案。
WITH t1 AS (
SELECT 'A' AS id, 'failed' AS status, '2021-05-18 18:30:00'::timestamp AS start_time UNION ALL
SELECT 'A' AS id, 'created' AS status, '2021-05-24 11:30:00'::timestamp AS start_time UNION ALL
SELECT 'A' AS id, 'created' AS status, '2021-05-24 12:00:00'::timestamp AS start_time UNION ALL
SELECT 'B' AS id, 'created' AS status, '2021-05-19 18:30:00'::timestamp AS start_time UNION ALL
SELECT 'B' AS id, 'successful' AS status, '2021-05-20 11:30:00'::timestamp AS start_time
)
SELECT *
FROM t1
【问题讨论】:
-
"我想过滤 id A 并且只得到 id B" 这没有多大意义。你能详细说明一下吗?
-
@Rajat 编辑了问题。如果仍然不清楚,请告诉我。
-
经验法则是在创建之前不能是任何带有状态的id
-
每个id都有一个'created'状态,这是需要记录的第一个状态。
标签: sql where-clause snowflake-cloud-data-platform window-functions