MySQL соединение двух таблиц - получить результат в соответствии со статусом - не работает - PullRequest
1 голос
/ 17 марта 2020

Я пытаюсь получить количество ожидающих элементов SUM, объединяя две таблицы, которые являются delivery и delivery_history.

Таблица Delivery_history имеет статус. Например, один заказ может иметь несколько статусов, таких как «Ожидание», «Счет выставлен».

доставка

id | items
-----------
10 | 12
11 | 10
13 | 20

история доставки

id | delivery_id | status 
---------------------
1    10         Pending
2    10         Invoiced - this is the current status of delivery id 10
3    11         Pending  - this is the current status of delivery id 11
4    13         Pending  - this is the current status of delivery id 13

Я хочу получить сумму пунктов всех отложенных ордеров. Для этого я написал следующий запрос, но он не сработал и дал мне ошибку. Может кто-нибудь, пожалуйста, посмотрите на это.

В синтаксисе SQL произошла ошибка; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с 'as latest_status = "Pending" "в строке 12

  SELECT SUM(delivery.items) AS pending_count
    FROM delivery 
    JOIN delivery_history ON delivery_history.delivery_id = delivery.id
    WHERE delivery.deleted="0"  
    AND
    (select dh.delivery_status
    from delivery_history dh
    where dh.delivery_id = delivery.id
    order by dh.id desc
    limit 1
    ) 
    as latest_status = "Pending"

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Этот следующий запрос также должен работать, если я хорошо понимаю:

SELECT SUM(d.items)
FROM delivery d JOIN (
     SELECT dh1.* FROM delivery_history dh1
     JOIN (
          SELECT delivery_id, MAX(id) as dhid 
          FROM delivery_history GROUP BY delivery_id
     ) dh2 ON dh1.id = dh2.dhid
     WHERE status = "Pending"
) dhp ON d.id = dhp.delivery_id
0 голосов
/ 17 марта 2020

Пожалуйста, попробуйте следующий запрос:

 SELECT SUM(delivery.items) AS pending_count
    FROM delivery 
    JOIN delivery_history ON delivery_history.delivery_id = delivery.id 
        AND delivery_history.status='Pending'
    WHERE delivery.deleted="0"  
    group by delivery_history.delivery_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...