0

day_date と各レコードの価格を含むテーブルがあり、次のように表示されます。

Day_date   Price
2012-05-20 500
2012-05-21 500
2012-05-22 500
2012-05-23 600
2012-05-24 600
2012-05-25 500
2012-05-26 500
2012-05-27 700
2012-05-28 700

私がやりたいことは、次のように表示することです:

season 2012-05-20 to 2012-05-22 price 500
season 2012-05-23 to 2012-05-24 price 600
season 2012-05-25 to 2012-05-26 price 500
season 2012-05-27 to 2012-05-28 price 700

以下のクエリを使用してこれを実行しようとしています。

SELECT min(day_add) as start_date, max(day_add) as end_date, price 
FROM table GROUP BY price

このクエリでは、次の結果が得られます。

2012-05-20  2012-05-26  500
2012-05-23  2012-05-24  600
2012-05-27  2012-05-28  700

ご覧のとおり、私がやりたいことを比較すると、最初のレコードはprice=5002012 年 5 月 20 日から 22 日で、3 位は 5 月 25 日から 26 日になるはずprice=500です。

私は価格でグループ化しているので、シーズンを 2012 年 5 月 25 日から 26 日までカットしています。

私が望むように結果を得るために行うことは可能SELECTですか?

ありがとう

4

1 に答える 1

1

グループ化する値がないため、問題はクエリ自体ではなくデータにあります。あなたがしなければならないのは、その新しい価値を創造することです。

あなたはこのようにそれを行うことができます:

select min(day_date) minDate, max(day_date) maxDate, price from (
  select day_date, @row := @row + (@price != price) grp, @price := price price
  from t, (select @row := 0, @price := '') init
  order by day_date
) final
group by final.grp, price

ここに、遊ぶためのフィドルがあります。

于 2012-04-27T15:14:27.613 に答える