0

我有一张带有 day_date 和 price 的表格,每条记录显示如下:

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=500应该是 2012 年 5 月 20 日至 22 日,然后第三名应该是 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 回答