2016-07-26 10 views
1

日付の範囲に基づいて、チャートの後に表示する製品の過去の価格変更を取得するMySQLクエリを探しています。例えば日付の受信範囲。デートが開始されていない場合は、最も近い過去の日付から範囲を取得します

Select * from HistoryPrices 
where StartDate>='1-1-2016' and EndDate<='1-20-2016' 
where ProductID=505 

これで結構です。これはもっと興味深いところです。 1-1-2016に商品の価格変更が含まれていない場合は、1-1-2016という過去の最も近い日付を取得し、結果に1-1-2016として記入する必要があります。

12-25-2015は、価格変更の最も近い過去の日付です。

例:

表は次のようになります。

Date  Price 
12-25-2015 44.5 
1-3-2016 50.5 
1-4-2016 45.6 
1-10-2016 40.99 
1-15-2016 50.50 
1-22-2016 50.99 

MySQLのクエリの結果は、(2016年1月1日から2016年1月20日まで)のようになります。

1-1-2016 44.5 
1-3-2016 50.5 
1-4-2016 45.6 
1-10-2016 40.99 
1-15-2016 50.50 

お知らせ1-1-2016の価格は12-15-2015です。

この結果を得るためのMySQLクエリを探しています。

答えて

1

はあなたのサンプル日のためにこれを試してみてください:

select * 
from HistoryPrices 
where `Date` >= date('2016-01-01') and `Date` <= date('2016-01-20') 
union (
    select '2016-01-01', Price 
    from HistoryPrices 
    where `Date` <= date('2016-01-01') 
    order by `date` desc 
    limit 1 
) 
order by `date` 

Demo Here

And Demo with 2016-01-01 included in data

+0

このクエリに問題があります。サンプルを見て:http://sqlfiddle.com/#!9/dcf944/9それは1つだけの結果(最後のもの)と2つの結果を返す必要があります。 – Dror

+0

@Drorしたがって、最小日付の日が「01」でない場合、この日の「価格」は必要ありません。 – Blank

+0

私の間違い、私はあなたにそれを与えたURLのサンプルで..私はなぜ私の環境で私は開始日と別の前の価格を得るのか分からない。理由は分かりません。奇妙な。クエリは同じです。 – Dror

関連する問題