我有一张表来跟踪各种商品的价格数据。这是一个简化的例子:
表名[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
谢谢!
答案 0 :(得分:1)
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
的每一行,其中该产品的价格不等于该产品的先前记录。