私は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