У меня есть таблица акций и таблица истории акций, и я в основном пытаюсь написать инструкцию MySQL, которая будет получать стоимость акции в определенный день (в данном случае 31 марта), которую можно найти только умножение стоимости единицы на то, что было на балансе каждой позиции в конкретный день.
Пока у меня есть:
SELECT
SUM(tbl_stock.cost_per_unit * tbl_stock_history.quantity_balance) as total
FROM
tbl_stock
LEFT JOIN
tbl_stock_history ON tbl_stock.part_ID = tbl_stock_history.part_ID
WHERE
tbl_stock_history.date_of_entry <= '20180331'
and tbl_stock.department = 1
AND tbl_stock.qty > 0
К сожалению, этот код берет сумму ВСЕХ qty_balances, найденных по истории идентификатора детали, а не только самую последнюю по параметру booking_date.
Я перепробовал все решения, которые мог найти с дополнительными запросами выбора, но ни один из них не играл в мяч, и я чувствую, что упускаю что-то очень очевидное!
Любая помощь приветствуется!
Значит, у каждого идентификатора детали каждый день одинаковое количество_баланс? запутался в отношении.
Столбец баланса покажет остаток баланса после последней транзакции - например, если взять 1 из 100, история покажет, что изначально было 100, а теперь баланс 99. Я надеюсь, что это имеет смысл!
Обратите внимание, что LEFT JOIN x... WHERE x=... такой же, как INNER JOIN x....
поэтому вам нужно найти последнюю транзакцию, которая <= '20180331', а не все транзакции, которые <= '20180331'.
Да @isaace, правильно :-)
См. meta.stackoverflow.com/questions/333952/…






Я думаю, что это то, что вы ищете:
SELECT
SUM(tbl_stock.cost_per_unit * t.quantity_balance) as total
FROM
tbl_stock
LEFT JOIN
(
SELECT * FROM tbl_stock_history
WHERE date_of_entry <= '20180331' ORDER BY date_of_entry DESC limit 1
)
t on tbl_stock.part_ID = t.part_ID
WHERE tbl_stock.department = 1
AND tbl_stock.qty > 0
Спасибо @isaace, это сработало отлично! Очень признателен!
Пожалуйста! Вы можете принять его, нажав на галочку слева.
Потому что последние действия с идентификатором детали могут быть не в указанный день, но значение все равно останется прежним!