如何通过条件标记 id?

How to flag id's by a condition?

我想创建一个标记 id 的列,它有一个直接的订购过程。即没有 order_status pendinginfo_required.

例如id apending,因此 is_straight 将为假。 b没有pending或者info_required,所以应该是真的。

示例数据如下:

    WITH t1 AS (
SELECT 'a' AS id, 'created' AS status, '2021-11-02 15:04:07'::timestamp AS created_at UNION ALL
SELECT 'a' AS id, 'created' AS status, '2021-11-03 13:23:34'::timestamp AS created_at UNION ALL
SELECT 'a' AS id, 'pending' AS status, '2021-11-07 04:04:46'::timestamp AS created_at UNION ALL
SELECT 'a' AS id, 'successful' AS status, '2021-11-07 13:25:05'::timestamp AS created_at UNION ALL
SELECT 'b' AS id, 'created' AS status, '2021-11-11 16:19:07'::timestamp AS created_at UNION ALL
SELECT 'b' AS id, 'successful' AS status, '2021-11-13 17:57:55'::timestamp AS created_at UNION ALL
SELECT 'c' AS id, 'created' AS status, '2021-11-15 01:09:23'::timestamp AS created_at UNION ALL
SELECT 'c' AS id, 'info_required' AS status, '2021-11-17 11:06:00'::timestamp AS created_at UNION ALL
SELECT 'c' AS id, 'successful' AS status, '2021-11-21 23:35:46'::timestamp AS created_at
    )

使用窗口化 COUNT_IF:

SELECT *,
   COUNT_IF(order_status IN ('pending', 'info_required')) OVER(PARTITION BY id) = 0 
            AS is_straight
FROM t1;

输出: