2011-03-02 98 views
0

我有一張表格,可以跟蹤各種商品的價格數據。這裏有一個簡單的例子:T-SQL高效剝離冗餘數據

表名[Product_Prices]

PRODUCT DATE PRICE 
------------------ 
Corn 1/1/2011 1.35 
Corn 1/2/2011 1.40  
Corn 1/3/2011 1.40  
Corn 1/4/2011 1.50  
Beef 1/1/2011 1.35  
Beef 1/2/2011 1.15  
Beef 1/3/2011 1.15  
Beef 1/4/2011 1.30  
Beef 1/5/2011 1.30  
Beef 1/6/2011 1.35 

我想拉動的最早日期的價格變化,爲每個實例那裏的價格實際上沒有更改查詢。基於上面的示例表,這是我想要的輸出:

PRODUCT DATE PRICE 
------------------  
Corn 1/1/2011 1.35  
Corn 1/2/2011 1.40  
Corn 1/4/2011 1.50  
Beef 1/1/2011 1.35  
Beef 1/2/2011 1.15  
Beef 1/4/2011 1.30  
Beef 1/6/2011 1.35 

我目前做的光標,但它是令人難以置信的效率低下,我覺得必須有一個更簡單的方式來獲得這些數據。我正在使用的表格有大約230萬條記錄。

SQL 2000

謝謝!

回答

1

不幸的是,SQL不是一種非常適合使用有序集的語言(關係數據庫非常適合,但SQL語言不適用)。此外,使用這些設置更容易的一些T-SQL功能(例如,ROW_NUMBER())直到SQL Server 2005才被引入。

由於SQL Server 2000的限制,您必須執行類似這樣的:

select 
    pp.Product, 
    pp.Date, 
    pp.Price 

from Product_Prices pp 

where pp.Price <> (select top 1 
         pp2.Price 

        from Product_Prices pp2 

        where pp2.Date < pp.Date 
        and pp2.Product = pp.Product 

        order by pp2.Date desc) 

(我沒有SQL Server 2000中可用於測試,但我相信這應該在2000年正常運行)

這將從Product_Prices檢索的所有行上的價格該產品是不等於該產品以前的記錄。

+0

我必須添加一個IsNull嵌套查詢,否則它跳過每個產品的第一個價格。但是這使我走上了正確的道路。謝謝! – Rob 2011-03-02 18:18:27