我有两张桌子。表1 (DateTable)包含日期和商品名称,表2 (PriceTable)包含一段时间内的价格和价格变化的日期。
表1( DateTable)
| itemName | Date |
| A | 2012-8-22|
| A | 2012-9-2 |表2( PriceTable)
| 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'and函数
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发布于 2012-08-25 02:39:24
这样行得通吗?仅用join替换udf
select
d.date,
p.Price
from
DateTable d
join PriceTable p
on p.itemName = d.itemName
and p.updateDate = (
select max(p2.updateDate)
from PriceTable p2
where
p2.updateDate < d.date
and p2.itemName = p.itemName
)
where d.itemName = 'A'https://stackoverflow.com/questions/12114831
复制相似问题