4

私がやりたいのは、指定された日付がテーブルの開始日と終了日の間にあるテーブルから価格を選択することです。

SELECT price 
FROM table 
WHERE 'dategiven' BETWEEN startdate AND enddate

これは日時フィルターを使えば簡単です。問題は、提供された時間枠に複数のレコードがあり、バージョン列もあるということです。

私のテーブルの例を以下に示します。

ここに画像の説明を入力

私のクエリ出力を以下のようにしdategivenたい2013-08-25 ここに画像の説明を入力

dategivenMilk には 3 つのレコードがあり、そのうちの 2 つは(2013-08-25)に有効です。次に、最高のバージョンで結果を返したいですか?

何かのようなもの:

SELECT
    price 
FROM table 
WHERE 'dategiven' BETWEEN startdate AND enddate AND max(version)
4

4 に答える 4

2

関数を使用しrow_number()て行をランク付けする

select product, price, version
from
(    
    select 
        *, 
        row_number() over (partition by product order by version desc) rn
    from yourtable
    where @dategiven between startdate and enddate
) v
where rn = 1
于 2013-08-29T13:12:44.970 に答える