Получить максимальное значение по приоритету, когда указанный столбец c не равен NULL - PullRequest
0 голосов
/ 30 января 2020

У меня есть таблица базы данных, такая как

transactions
-----------
id
code
date
amount


formalities
-----------
id
transaction_id

Это запрос для получения максимального значения транзакций

SELECT MAX(transaction_id) FROM `transactions` n LEFT JOIN `formalities` r ON r.transaction_id = n.id

Но здесь я хочу получить максимальное значение id группируйте по коду транзакции, но значение должно проверять, имеют ли транзакции отношение к формальностям или нет.

Если да, получите максимальное значение там, где они связаны. Если не просто получить обычное максимальное значение. Есть ли запрос для достижения чего-то подобного?

пример:

transactions
--------------------
id | code | amount |
1 | ABC | 10000 |
2 | ABC | 20000 |
3 | KOO | 10000 |
4 | ABC | 20000 |
5 | KOO | 30000 |
6 | KOO | 10000 |

formalities
-----------
id | transaction_id |
1 | 3 |
2 | 5 |

Я хочу получить следующий вывод из таблицы транзакций

id
-- 
4 
5 ( priority the one that have relation and get the max value)

Ответы [ 2 ]

2 голосов
/ 02 февраля 2020

Используйте LEFT JOIN и получите оба значения - MAX(transactions.id) и MAX(formalities.transaction_id):

select t.code, max(f.transaction_id), max(t.id)
from transactions t
left join formalities f on f.transaction_id = t.id
group by t.code

Результат будет

| code | max(f.transaction_id) | max(t.id) |
| ---- | --------------------- | --------- |
| ABC  | NULL                  | 4         |
| KOO  | 5                     | 6         |

Показать на БД Fiddle

Для «приоритезации» столбца transaction_id из таблицы formalities вы можете использовать COALESCE(), который будет возвращать первое ненулевое значение:

select t.code, coalesce(max(f.transaction_id), max(t.id)) as max_transaction_id
from transactions t
left join formalities f on f.transaction_id = t.id
group by t.code

Результат:

| code | max_transaction_id |
| ---- | ------------------ |
| ABC  | 4                  |
| KOO  | 5                  |

Просмотр на БД Fiddle

0 голосов
/ 30 января 2020

Я не уверен, правильно ли я понял вопрос, но почему бы вам просто не использовать -

SELECT MAX(transaction_id) FROM `transactions` n INNER JOIN `formalities` r ON r.transaction_id = n.id group by n.code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...