[英]MySQL : group by column and get date range
I have a table like this 我有一张这样的桌子
id - price - date
1 - 10 - 01/01/2017
2 - 10 - 02/01/2017
3 - 10 - 03/01/2017
4 - 10 - 04/01/2017
5 - 10 - 05/01/2017
6 - 20 - 06/01/2017
7 - 20 - 07/01/2017
8 - 20 - 08/01/2017
9 - 20 - 09/01/2017
10 - 10 - 10/01/2017
11 - 10 - 11/01/2017
12 - 10 - 12/01/2017
13 - 10 - 13/01/2017
And I want to show result this way 我希望以这种方式显示结果
10 - 01/01/2017 - 05/01/2017
20 - 06/01/2017 - 09/01/2017
10 - 10/01/2017 - 13/01/2017
My query is 我的疑问是
SELECT price, min(date), max(date) FROM mytable GROUP BY price
but result is 但结果是
20 - 06/01/2017 - 09/01/2017
10 - 10/01/2017 - 13/01/2017
Can I get right result with mysql query or must find a php solution? 我可以使用mysql查询获得正确的结果,还是必须找到php解决方案?
This is a gaps and islands problem. 这是一个空白和岛屿问题。 You can use variables in order to detect islands of consecutive records having the same price
value: 您可以使用变量来检测具有相同price
值的连续记录的岛:
SELECT price, MIN(`date`) AS start_date, MAX(`date`) AS end_date
FROM (
SELECT id, price, `date`,
@rn := @rn + 1 AS rn,
-- If price remains the same then increase island population,
-- otherwise reset it
@seq := IF(@p = price, @seq + 1,
IF(@p := price, 1, 1)) AS seq
FROM mytable
CROSS JOIN (SELECT @p := 0, @rn := 0, @seq := 0) AS vars
ORDER BY `date`) AS t
GROUP BY price, rn - seq
SELECT price, min(date), max(date) FROM mytable GROUP BY price order by price
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.