0

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

1 に答える 1

1

これは機能しますか?udfを単にjoin?に置き換える

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'
于 2012-08-24T18:39:23.603 に答える