Ошибка в запросе с фильтрацией при помощи вложенного запроса
У меня какая-то проблема с запросом вычисления себестоимости заготовки для блюда в ресторане. Запрос вот такой:
select (SUM(IF(inv.gross <> 0, (inv.price_for_all / inv.gross) * II.weight, 0)) / B.weight) * BI.weight AS costPriceBlank, inv.id, inv.name
from invoice inv
join stock_item si on inv.stock_item_id = si.id
join ingredient I on si.ingredient_id = I.id
join ingredient_info II on I.id = II.ingredient_id
join blank B on II.blank_id = B.id
join blank_info BI on B.id = BI.blank_id
join warehouses W on W.id = si.warehouses_id
join posinfo pi on W.pos_info_id = pi.id
where B.id = 117
and pi.client_legal_informations_id = 12
and inv.id = (SELECT inv_sub.id
FROM invoice inv_sub,
stock_item si_sub
WHERE inv_sub.id in (inv.id)
AND inv_sub.warehouses_id = W.id
AND inv_sub.archive = FALSE
AND inv_sub.expense = FALSE
AND inv_sub.stock_item_id = si_sub.id
GROUP BY inv_sub.id
ORDER BY inv_sub.id
LIMIT 1)
group by inv.name,
inv.price_for_all,
inv.price_for_one,
inv.gross,
inv.id,
BI.weight
order by inv.id;
Для отладки кроме суммы он еще выводит номер и название накладной на складе, из которой берется стоимость ингредиентов для заготовки.
Внутренний запрос фильтрует накладные и нужен для того, чтобы в расчетах учитывалась только первая несписанная накладная.
Проблема в том, что этот запрос работает неправильно. Он выбирает лишние накладные. Он должен брать только одну несписанную накладную, а берет все. Если добавить еще несколько накладных на один и тот же ингредиент на складе, то они все учитываются.
Как переписать этот запрос, чтобы в расчете учитывалась только одна первая несписанная накладная по каждому ингредиенту?
7500,360,соль каменная (кг) 10000,361,сахарный песок (кг) 2500,362,сахарный песок (кг)