如何在日期时间相同的情况下使用 select 更大的顺序?

How to use select a greater order when datetime is the same?

我有一个 table:

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

因此,如果购买、领取和点击具有相同的日期时间,则应该 select 购买。如果没有购买、认领和点击,则日期时间应该 select 认领。

我有此查询 select 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

使用 DECODE 添加额外的列排序以防出现平局:

SELECT NUMBER_ID, COUNTRY
    ,(array_agg(STATUS) within group(order by DATETIME desc, 
                        DECODE(status, 'BOUGHT',1,'CLAIMED',2,'CLICKED',3, 99)
     )[0])::varchar as LAST_STATUS
from TBL_A
GROUP BY NUMBER_ID, COUNTRY;