У меня есть две таблицы, первая – это вчерашние уровни акций, которые называются « вчера » и содержат два столбца:
StockNumber, StockLevel
Вторая таблица – это сегодняшние уровни запасов, которые называются « сегодня » и имеют те же столбцы «StockNumber, StockLevel».
Мой вопрос: как найти различия в уровнях запасов между таблицами «вчера» и « сегодня » для изменений « StockLevel » и нового « StockNumber », появляющегося в « сегодняшнем ».
Если это можно сделать с помощью простого SQL, это здорово, но добавление дополнительного уровня обработки с использованием PHP тоже в порядке
select y.StockNumber, t.StockLevel - y.StockLevel from yesterday as y inner join today as t on (y.StockNumber = t.StockNumber)
редактировать:
для захвата продуктов в сегодняшней таблице, которые не были в вчерашней таблице:
select y.StockNumber, t.StockLevel - coalesce(y.StockLevel,0) from yesterday as y right join today as t on (y.StockNumber = t.StockNumber)
Coalesce гарантирует, что если у вас есть продукт, которого нет yesterday
, вы получите t.StockLevel - 0
вместо t.StockLevel - NULL
Это позволит вам узнать об изменениях со вчерашнего дня, возвратив нулевое значение для акций, которые являются новыми для сегодняшнего дня (т. Е. Со вчерашнего дня нет изменений)
SELECT t.stocknumber, t.stocklevel-y.stocklevel difference FROM today t LEFT JOIN yesterday y ON t.stocknumber = y.stocknumber
SQLfiddle для тестирования .
Ну, вы можете узнать разницу между уровнем акций вчера и сегодня, используя следующий sql.
select y.stockNumber, (t.stockLevel-y.stockLevel) as difference from today t, yesterday y, where t.stockNumber=y.stockNumber group by t.stockNumber,t.stockLevel,y.stockLevel
Надеюсь это поможет.