@EvgMul

Как выбрать последнее вхождение, удовлетворяющее запросу?

Здравствуйте, подскажите пожалуйста, как решить следующую проблему.
Есть вот такой запрос:
UPDATE
    sales as s
    join payments_parts pp on pp.FK_sale = s.ID
    join payments pay ON pp.FK_payment = pay.id
SET s.plan_payment_date = pay.payment_date
WHERE s.ID = pp.FK_sale and pay.ID = pp.FK_payment;


Проблема в том, что в таблице payments может быть несколько строк, удовлетворяющих запросу и в результат попадает первая. Мне нужно, чтобы попадала последняя, а в идеале по максимальному значению поля pay.payment_date.
Подскажите пожалуйста, как можно это реализовать.
Заранее благодарен всем отозвавшимся.
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
@EvgMul Автор вопроса
Если кому-то когда-то будет полезно, то вот запрос, удовлетворяющий условию.
UPDATE sales AS s
JOIN ( SELECT pp.FK_sale, MAX(pay.payment_date) payment_date 
       FROM payments_parts pp
       JOIN payments pay ON pp.FK_payment = pay.id
       GROUP BY pp.FK_sale) p ON p.FK_sale = s.ID
SET s.plan_payment_date = p.payment_date;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@ponaehal
так работает?

UPDATE
    sales as s
SET s.plan_payment_date = (SELECT 
                                                       MAX(pay.payment_date) 
                                                   FROM 
                                                       payments pay
                                                   ,  payments_parts pp
                                                   WHERE pay.ID = pp.FK_payment
                                                          and s.ID = pp.FK_sale 
                                             )


Хотя сам бы за такое пальцы отрубил бы исполнителю )))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы