获取第一笔交易成功刷卡的所有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' ;
我正在尝试获取所有 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' ;