MySQL 获取最近 7 次失败交易的所有卡记录



我有三个表cards (id,...)order_cards (card_id, order_id....)transactions (order_card_id, status, ....)

我想获取最近 7 笔交易失败的所有卡

我正在尝试类似的东西

select  cards.*,
(
select sum(case tmp1.status when 'fail' then 1 else 0 end) from  
(select transactions.status from order_cards
left join transactions on transactions.order_card_id = order_cards.id
where order_cards.card_id = cards.id
order by transactions.id desc limit 7
) as tmp1
) as total_fail
from cards
group by cards.id
having total_fail > 5

收到此错误

Unknown column 'cards.id' in 'where clause'

上述查询的问题是父 ID 在级别 2 子查询中不起作用。 尝试使用带有计数的子句,但它不适用于限制 任何建议谢谢

已经尝试过

在子查询的子查询中使用父查询的列

MYSQL - 获取同一 id 具有 1 条以上记录的所有记录

我认为parent-ids 不能在 FROM 子句的派生表中使用,但仍然可以在子查询的 WHERE 子句和 SELECT 列表中访问。因此,在您的情况下,您可以找到card_id的第 8 个最新 transaction.id(LIMIT 7,1),然后根据该 transaction.id 进行SUM():(注意当同一card_id中的事务少于 8 个时,LIMIT 7,1将返回 NULL,在这种情况下,应计算所有事务,因此如下:t1.id > IFNULL((...), 0)):

SELECT  c.*
,   IFNULL((
SELECT sum(t1.status = 'fail') 
FROM order_cards o1
JOIN transactions t1 on t1.order_card_id = o1.id
WHERE o1.card_id = c.id
AND t1.id > IFNULL((
SELECT t2.id 
FROM order_cards o2
JOIN transactions t2 on t2.order_card_id = o2.id
WHERE o2.card_id = c.id
ORDER BY t2.id DESC 
LIMIT 7,1
), 0)
), 0) as total_fail
FROM cards c
HAVING total_fail > 5

我在我自己的服务器的数据库上测试了一个类似的SQL,它工作正常,同样的方法可能适用于您的情况。

这应该有效。 Select c.*, SUM(t.status = 'FAILED') AS failed_txns from cards c, order_cards oc, transactions t where t.status='FAILED' and oc.order_id = t.order_card_id and c.id = oc.card_id group by c.id having failed_txns >= 7

相关内容

  • 没有找到相关文章

最新更新