2012-04-27 72 views
0

我有一个表day_date和价格显示每条记录如下:MySQL查询建立组日期每日记录

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 

使用此查询我收到以下资源ULT:

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

正如你看到的我比较想要做的是,与price=500第一个记录应该是从20至2012年5月22日,然后在第3个地方要来25日至26日在至极price=500

,因为我按价格分组它切割从25赛季到26 2012年5月

是否有可能做SELECT得到的结果,因为我想要的吗?

感谢

回答

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 

在这里,你有fiddle一起玩。

+0

您好Mosty,谢谢你的回复我做了尝试和正常工作我只是想了解你使用的语法是如何工作的,如果我有另一列叫所有值= 2的分配,我怎么也分组它? – user1361389 2012-04-27 15:45:46

+0

@ user1361389嘿!只需删除外部选择和组。你会看到我在那里做的诀窍。如果您已经有某种列每个组具有不同的值,那么您可以使用它。如果你不这样做,你必须以这种方式创建它。 – 2012-04-27 17:22:23