【发布时间】:2021-12-17 05:26:21
【问题描述】:
我需要检索所有应该重试的事务,具体取决于事务接收到的消息,例如,如果我们收到诸如“超时”之类的错误消息,则该事务需要进行第二次尝试。所有交易都存储在一个表中,这意味着如果支付 id 重复,则表示该交易进行了重试,但也有不会发生这种情况的情况。
我编写了一个查询,它使用错误消息提取事务并将它们分组 通过付款 ID,查询有效,但它也带来了第二次尝试的交易。
我做错了什么?
| payment_id | Bank | time_requested | issuer | message |attempt|
| 10369 | Citi | 2021-08-03 | Capital One | success | 1 |
| 10383 | HSBC | 2021-07-07 | Discover | success | 1 |
| 84530 | HSBC | 2021-07-07 | Visa | timeout | 1 |
| 84530 | HSBC | 2021-07-07 | Visa | success | 2 |
| 53030 | Citi | 2021-07-07 | Diners | success | 1 |
| 23930 | Citi | 2021-07-07 | Diners | timeout | 1 |
select payment_id, count(payment_id) as times
from paymentstbl
where message in ('timeout', 'disconnected','unknown', 'Unavaialble')
group by payment_id
having times =1
Results:
| payment_id | times |
| 84530 | 1 |-- Wrong. Id 84530 is twice in the table
| 23930 | 1 |-- Correct.
【问题讨论】:
-
但是第二个有
message的success并且您排除了success消息:)
标签: mysql sql database group-by duplicates