MySQL вычесть из изолированного подзапроса - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть таблица, содержащая инвентарь

ID   |   Product ID   |  In_Transit  |   Quantity   | Cumulative Quantity
=====+================+==============+==============+====================
1    |      1         |     0        |     1000     |      1000
2    |      1         |     0        |        1     |      1001
3    |      1         |     1        |       54     |      1055
4    |      1         |     1        |        1     |      1056

Таким образом, общий запас для идентификатора продукта 1 равен «1056». Я получаю его, используя объединение подзапроса SELECT MAX (ID) с таблицей, чтобы получить его накопленное количествоэто 1056.

Я хотел бы получить сумму инвентаря (вычитая все суммы в пути)

Итак, 1056 - 54 - 1 = 1001

Как бы я получитьэто в одном запросе, так что я получаю

Product ID | Total Inventory | Inventory on Hand (Excluding in Transit |
===========+=================+=========================================    
1          |     1056        |           1001

Также мне нужно использовать совокупный инвентарь, чтобы получить итоговую сумму, а не 'SUM', за исключением суммирования тех, кто находится в пути, потому что (те, которые не находятся в пути) имеютбольшое количество записей, и они принимают возрасты в сум.Я могу использовать его для суммирования тех, кто находится в пути, потому что записей намного меньше

1 Ответ

4 голосов
/ 22 ноября 2011
SELECT 
    a.product_id
  , a.cumulative as total_inventory
  , a.cumulative - COALESCE(b.quantity,0) AS inventory_on_hand
FROM table1 a
JOIN 
    ( SELECT MAX(id) AS max_id
      FROM table1
      GROUP BY product_id
    ) m ON (m.max_id = a.id)
LEFT JOIN
    ( SELECT product_id, SUM(quantity) 
      FROM table1 
      WHERE in_transit = 1
      GROUP BY product_id
    ) b ON (a.product_id = b.product_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...