我有 2 张桌子。表 1 (DateTable) 包含日期和项目名称,表 2 (PriceTable) 包含随时间变化的价格和价格变化的日期。
表 1(日期表)
| itemName | Date |
| A | 2012-8-22|
| A | 2012-9-2 |
表2(价格表)
| Update Date | Price|itemName|
| 2012-7-1 | 5.00 | A |
| 2012-8-1 | 5.50 | A |
| 2012-9-1 | 6.00 | A |
我的任务是,给定一个日期,我想确定该日期的商品价格。
我目前正在使用标量函数执行此操作,这真的很慢。有没有办法可以重写它,或者作为表值函数或者使用其他有助于加快速度的方法?我一直盯着这个有一段时间了,但无济于事。
我目前的查询:
select
d.date
,dbo.fn_GetPrice(d.date, 'A')
from DateTable d
where d.itemName = 'A'
和功能
alter function fn_GetPrice(@date DateTime, @itemName varchar(50))
returns int
as
begin
declare @price int
select @price = p.price
from PriceTable p
where p.itemName = @itemName
and p.updateDate = (select MAX(p2.updateDate)
from PriceTable p2
where p2.updateDate < @date
and p2.itemName = @itemName)
return @price
end