【发布时间】:2022-01-12 19:10:58
【问题描述】:
我有一张桌子:
CREATE TABLE TBL_A
(
number_id int,
country varchar(50),
status varchar(50),
datetime date
);
INSERT INTO TBL_A
VALUES (121144, 'USA', 'CLICKED', '2021-10-09'),
(121144, 'USA', 'CLAIMED', '2021-10-10'),
(121144, 'USA', 'BOUGHT', '2021-10-11'),
(121111, 'CAD', 'CLICKED', '2021-10-12'),
(121111, 'CAD', 'CLAIMED', '2021-10-12'),
(121111, 'CAD', 'BOUGHT', '2021-10-12'),
(121133, 'AUS', 'CLICKED', '2021-10-14'),
(121133, 'AUS', 'CLAIMED', '2021-10-14');
基于 number_id 和国家,我想根据日期时间获取最后状态。我遇到的问题是日期时间具有相同的值。发生这种情况时,我希望最后一个状态遵循此顺序:
> BOUGHT > CLAIMED > CLICKED
因此,如果购买、认领和点击的日期时间相同,则应选择已购买。如果没有购买和认领并点击,则应选择 CLAIMED 的日期时间。
我有这个查询来选择 LAST 状态,但是当日期时间相同时,我需要它来考虑顺序:
SELECT
NUMBER_ID,
COUNTRY,
(array_agg(STATUS) WITHIN GROUP (ORDER BY DATETIME DESC)[0])::varchar AS LAST_STATUS
FROM
TBL_A
GROUP BY
1, 2
【问题讨论】:
标签: sql snowflake-cloud-data-platform snowflake-schema