SQL SELECT одна строка на номер счета-фактуры, где нет статуса успеха - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть таблица с записями финансовых транзакций. У него есть invoice_number и столбцы состояния. В invoice_number может быть более одной строки, что означает, что могут быть неудачные транзакции.

Мне нужно запросить последнюю отклоненную транзакцию, если не было успешной транзакции для определенного счета.

invoice_number | status
1              | declined
1              | successful
2              | declined
2              | declined

В приведенном выше примере мне нужно получить только последний ряд. Как может выглядеть SQL-запрос. Спасибо.

1 Ответ

0 голосов
/ 03 ноября 2018

Вам нужен способ получить последнюю транзакцию. Вот один из подходов:

select distinct on (invoice_number) t.*
from transactions t
where not exists (select 1
                  from transactions t2
                  where t2.invoice_number = t.invoice_number and
                        t2.status = 'successful'
                 )
order by invoice_number, created_at desc;

Если вам нужна только дата, вы можете использовать агрегацию:

select t.invoice_number, max(t.created_at)
from transactions t
group by t.invoice_number
having sum( (t.status = 'successful')::int ) = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...