В моем приложении мне нужно получить SUM(admin_amount)
с условием ниже.
Таблица 1
id, идентификатор_драйвера, admin_amount, trip_date
Таблица 2
id, идентификатор_драйвера, from_date, to_date, сумма, create_date
В таблице 2, администратор будет получать свою комиссию от водителя на основе дат.Например, Водитель должен заплатить 1000 рупий администратору за его комиссию за поездку с 2019-10-01 по 2019-10-10.Поэтому, когда водитель приходит, чтобы заплатить администратору в то время, мне нужно найти общее количество ожидающих драйверов, чтобы заплатить администратору.
Что я пытаюсь ...
Я пытаюсь получить дату последней транзакции (create_date) из table2
, чтобы я мог получить дату последнего платежа и на основании этого яможно рассчитать SUM(admin_change) till now
.
Я могу сделать это с помощью двух запросов.
1) Получить последнюю дату
SELECT * FROM table2
WHERE driver_id = 14
ORDER BY created_date DESC
LIMIT 1;
2) Если я получил данные, тогда использовать дату в условии, иначе просто получить SUM() всех данных.
Может ли кто-нибудь помочь добиться этого в одном запросе?
Попробуйте
SELECT SUM(admin_amount)
FROM table1
WHERE driver_id = 33
AND trip_date >= (SELECT created_date
from table2
WHERE driver_id = 33
ORDER by created_date DESC
LIMIT 1);
Этот запрос работает, когда какие-либо данные существуют, но не работает, когдаТаблица2 не имеет данных соответствующего драйвера.
Table1
1, 33, 50, 2019-10-01
2, 33, 70, 2019-10-01
3, 33, 30, 2019-10-10
Table2
// Если новый драйвер, то транзакции еще нет.
// Если есть предыдущая транзакция, тогда данные будут такими, как показано ниже.
1, 33, 2019-10-01, 2019-10-10, 150, 2019-10-29