MYSQL присоединяется к последней записи и умножается

У меня есть таблица акций и таблица истории акций, и я в основном пытаюсь написать инструкцию 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.

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

Любая помощь приветствуется!

Потому что последние действия с идентификатором детали могут быть не в указанный день, но значение все равно останется прежним!

B.Doe 16.05.2018 22:14

Значит, у каждого идентификатора детали каждый день одинаковое количество_баланс? запутался в отношении.

isaace 16.05.2018 22:17

Столбец баланса покажет остаток баланса после последней транзакции - например, если взять 1 из 100, история покажет, что изначально было 100, а теперь баланс 99. Я надеюсь, что это имеет смысл!

B.Doe 16.05.2018 22:26

Обратите внимание, что LEFT JOIN x... WHERE x=... такой же, как INNER JOIN x....

Strawberry 16.05.2018 22:27

поэтому вам нужно найти последнюю транзакцию, которая <= '20180331', а не все транзакции, которые <= '20180331'.

isaace 16.05.2018 22:31

Да @isaace, правильно :-)

B.Doe 16.05.2018 22:37

См. meta.stackoverflow.com/questions/333952/…

Strawberry 16.05.2018 22:42
stackoverflow.com/help/someone-answers
Nick 16.05.2018 23:58
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
8
41
1

Ответы 1

Я думаю, что это то, что вы ищете:

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, это сработало отлично! Очень признателен!

B.Doe 16.05.2018 22:50

Пожалуйста! Вы можете принять его, нажав на галочку слева.

isaace 16.05.2018 22:51

Другие вопросы по теме