2013-02-24 39 views
1

我有兩個表,第一是昨天的庫存水平稱爲「昨天」,包含兩列:MySQL的查找兩個表之間的庫存水平的差異,並返回結果

StockNumber, StockLevel 

第二個表是今天的庫存水平稱爲「今天」,並具有相同的欄目「StockNumber,StockLevel」。

我的問題是,我該如何找到「昨天」之間的庫存水平的差異,兩個「StockLevel」的變化和新的「StockNumber」出現「今天在「今天」表「。

如果這可以用直接的SQL這是偉大的,但添加使用PHP處理額外的級別上進行也行

+1

是的,它可以在SQL中完成 - 給它一個。如果您在生成的SQL中遇到問題,那麼將其作爲一個問題。 – 2013-02-24 11:24:54

+0

「昨天」的股票水平*不*出現在「今天」? – 2013-02-24 13:20:48

回答

2
select y.StockNumber, t.StockLevel - y.StockLevel from yesterday as y inner join today as t on (y.StockNumber = t.StockNumber) 

編輯:

捕捉到的產品,其中間沒有今天表「T在昨天表:

select y.StockNumber, t.StockLevel - coalesce(y.StockLevel,0) from yesterday as y right join today as t on (y.StockNumber = t.StockNumber) 

聚結保證,如果你有一個產品,它是不是在yesterday,你會得到t.StockLevel - 0 inste廣告的t.StockLevel - NULL

+0

'...「StockLevel」更改**和新的「StockNumber」出現在「今日」**中。 – 2013-02-24 11:28:11

+0

如果股票數量從昨天變爲今天,那麼將無法加入它們! – 2013-02-24 11:29:03

+0

@Ian,啊股票數量將保持不變,只是如果在「今日」表格中添加了新股票號碼,那麼需要確定新的股票號碼以及要返回的股票數量和級別的股票級別以及。 – 2013-02-24 11:40:25

0

那麼,你可以找出昨天和今天使用以下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 

希望這會有所幫助。

1

這將讓你知道,從昨天的變化,對於那些新的股票今天返回空(即沒有從昨天的變化顯示)

SELECT t.stocknumber, t.stocklevel-y.stocklevel difference 
FROM today t 
LEFT JOIN yesterday y 
    ON t.stocknumber = y.stocknumber 

An SQLfiddle to test with