2011-11-27 48 views
0

我正在使用SQL Server 2005.我有一個名爲Product的表。現在我需要找出某個月某個產品的價格。無論月底產品的價格是多少,都是價格。爲了使場景更清楚,我有下面的例子:SQL Server顯示歷史數據

CREATE TABLE Product(ProductID int, Product Varchar(50), Price Decimal(5,2), FromDate DateTime, ToDate Datetime); 

數據可能看起來像如下:

INSERT INTO Product(ProductID, Product, Price, FromDate, ToDate) 
SELECT 1,Pen,2.99,'01/15/2011','03/25/2011' 
UNION 
SELECT 2,Pen,3.99,'03/25/2011','05/02/2011' 
UNION 
SELECT 3,Pen,4.99,'05/02/2011',NULL 

現在這裏,筆目前的價格是4.99,因爲它的TODATE仍然是空。現在1月份和2月份Pen的價格爲2.99。 3月25日筆的價格變爲3.99,所以3月份筆的價格爲3.99。筆的價格在五月份再次改爲4.99。所以5月份和5月份筆的價格是5月份。

現在,我需要編寫一個sql腳本,它會給我給定月份的產品價格。任何幫助,將不勝感激。

+0

Fromdate可能是NULL嗎? – Sparky

+0

看到這個:http://data.stackexchange.com/stackoverflow/s/2167/get-current-price –

+0

沒有Fromdate永遠不會是NULL – niceApp

回答

0
SELECT * From Product where @monthenddate 
between FROMDATE and isNUll(TODate,get date()) 

我要把它留給你來計算一個月的最後一天

+0

它似乎工作。謝謝你斯帕克。 – niceApp

+0

這個問題的一個問題是,如果你把'05/02/2011'作爲@monthenddate,你會得到兩個結果。只要您的輸入可以保證不在範圍的端點上,或者您可以修復數據,以確保沒有重疊 –

+0

的真實情況,但是請求是獲得特定月份和月份的價格被假定爲本月的最後一天。從理論上講,你永遠不會根據他所要求的內容輸入2011年5月2日... – Sparky

0

下面的工作,但你應該注意,如果輸入是5/02/2011,那麼價格將是4.99。如果你希望它是3.99只是改變比較opperators是<和> =

Select price 
From 
      Product 
Where 
      Product = 'Pen' 
      And fromdate <= @inputDate 
     And (todate > @inputDate or todate is null) 

看到它Data.SE

+0

我不認爲這會奏效。因爲假設我將值'04/01/2011'作爲@inputDate來確定2011年4月份筆的價格。現在您的腳本將返回值4.99,這是不正確的。 2011年4月的鋼筆價格爲3.99。 – niceApp

+0

@mrp doh看起來像我扭轉了我的操作員對此感到抱歉 –