根据 Snowflake 中的创建日期顺序检查值优先级

Check values precedence based on creation date order in Snowflake

我有一个小案例,我想使用 SQL/Snowflake 突出显示。

例如(下图table1),如果CF_PO_Number中值NO PO的创建日期小于值PO-0257880的创建日期则PO_Issued = True

Job_ID CF_PO_Number Created_At
153428 PO-025780 2021-10-20 10:22:43.000000000
153428 2021-10-20 09:03:14.000000000
153428 NO PO 2021-10-05 13:16:04.000000000

table 1 的期望结果如下,

Job_ID PO_Issued
153428 True

另一个例子(下图table2),如果CF_PO_Number中值PO-0257880的创建日期早于值NO PO的创建日期则PO_Issued = False

Job_ID CF_PO_Number Created_At
153428 NO PO 2021-10-20 10:22:43.000000000
153428 2021-10-20 09:03:14.000000000
153428 PO-025780 2021-10-05 13:16:04.000000000

table 2 的期望结果如下,

Job_ID PO_Issued
153428 False

此外,CF_PO_Number 只能有一个值,要么 NO PO 表示 PO is required and not issued 然后 PO_Issued = FalsePO-025780 表示 PO is required and issued那么PO_Issued = True,例子很少发生

我希望案子现在已经清楚了。

因此,如果我理解 CF_PO_Number ['NO_PO', 'PO-025780', null] 只能有三个值,我们正在查找 no_po 和 po.

的相关日期

那么这个 SQL 我认为涵盖了您的情况: 刚刚注意到 431 案例

SELECT
    job_id,
    max(iff(CF_PO_Number='NO PO', Created_At, null)) as no_po_date,
    max(iff(CF_PO_Number='PO-025780', Created_At, null)) as po_date,
    CASE
        WHEN no_po_date is null AND po_date is not null then true
        WHEN no_po_date is not null AND po_date is null then false
        WHEN no_po_date is null AND po_date is null then false -- CAN THIS HAPPEN? 
        ELSE no_po_date < po_date
    END as PO_Issued      
FROM VALUES
    (153428, 'PO-025780', '2021-10-20 10:22:43'),
    (153428, null, '2021-10-20 09:03:14'),
    (153428, 'NO PO', '2021-10-05 13:16:04'),
    (153429, 'NO PO', '2021-10-20 10:22:43'),
    (153429, null, '2021-10-20 09:03:14'),
    (153429, 'PO-025780', '2021-10-05 13:16:04'),
    (153430, 'NO PO', '2021-10-05 13:16:04'),
    (153431, 'PO-025780', '2021-10-05 13:16:04')
    t(Job_ID, CF_PO_Number, Created_At)
GROUP BY 1
ORDER BY 1;

给出:

JOB_ID NO_PO_DATE PO_DATE PO_ISSUED
153,428 2021-10-05 13:16:04 2021-10-20 10:22:43 TRUE
153,429 2021-10-20 10:22:43 2021-10-05 13:16:04 FALSE
153,430 2021-10-05 13:16:04 FALSE
153,431 2021-10-05 13:16:04 TRUE