如何获得列的最大状态?

How to get max status as a column?

我想创建一个列,根据 created_at.

显示最大值 order_status 为 TRUE 还是 FALSE

有没有办法在 Snowflake 中不使用子查询来实现这一点?

这是我的示例数据:

    WITH t1 AS (
SELECT 'A' AS id, 'created' AS status, '2021-05-18 18:30:00'::timestamp AS created_at UNION ALL
SELECT 'A' AS id, 'created' AS status, '2021-05-19 11:30:00'::timestamp AS created_at UNION ALL
SELECT 'A' AS id, 'pending' AS status, '2021-05-19 12:00:00'::timestamp AS created_at UNION ALL
SELECT 'A' AS id, 'successful' AS status, '2021-05-20 18:30:00'::timestamp AS created_at
    )

一个盒子 row_number 可以工作

SELECT id, status, created_at
, CASE 
  WHEN 1 = ROW_NUMBER() OVER (PARTITION BY id ORDER BY created_at DESC) 
  THEN 'TRUE' 
  ELSE 'FALSE'
  END is_final_order_status
FROM t1

使用窗口化 MAX:

WITH t1(id, status, created_at) AS (
  SELECT 'A', 'created', '2021-05-18 18:30:00'::timestamp UNION ALL
  SELECT 'A', 'created', '2021-05-19 11:30:00'::timestamp UNION ALL
  SELECT 'A', 'pending', '2021-05-19 12:00:00'::timestamp UNION ALL
  SELECT 'A', 'successful', '2021-05-20 18:30:00'::timestamp AS created_at
)
SELECT *, created_at = MAX(created_at) OVER(PARTITION BY ID) AS is_final_order_status
FROM t1;

输出: