获取第一笔交易成功刷卡的所有ID

Get all IDs where the first transaction was a succesful card payment

我正在尝试获取所有 USER_IDs 其中第一笔交易是成功的卡支付

但是,我得到了可疑的结果 - 我不一定要获取第一笔信用卡支付交易。对于某些用户来说,这确实是正确的。然而,对于其他人,我目前正在获取另一笔交易。

任何关于可能错误的指导将不胜感激

SELECT
    t."USER_ID",
    (t."AMOUNT") AS amount
FROM
    transactions t
INNER JOIN 
    (SELECT MIN( tt."CREATED_DATE" ) AS date, tt."USER_ID"
     FROM transactions tt
     WHERE      
        tt."STATE" = 'COMPLETED'
        AND tt."TYPE" = 'CARD_PAYMENT'
     GROUP BY tt."USER_ID") tt ON t."USER_ID" = tt."USER_ID"
ORDER BY
    amount DESC

一种方法使用聚合,将用户的最早日期与信用卡交易成功的最早日期进行比较:

select user_id
from transactions t
group by user_id
having min(created_date) = 
       min(case when state = 'COMPLETED' and type = 'CARD_PAYMENT' then created_date end);

另一种方法——如果你想要整行——是not exists:

select t.*
from transactions t
where t.state = 'COMPLETED' and
      t.type = 'CARD_PAYMENT' and
      t.created_date = (select min(t2.created_date)
                        from transactions t t2
                        where t2.user_id = t.user_id 
                       );

或者,使用 window 函数:

select t.*
from (select t.*,
             row_number() over (partition by user_id order by created_date) as seqnum
      from t
     ) t
where seqnum = 1 and
      t.state = 'COMPLETED' and
      t.type = 'CARD_PAYMENT' ;