/ / MySQL:列ごとにグループ化し、日付範囲を取得-php、mysql

MySQL:列別にグループ化し、日付範囲を取得する - php、mysql

私はこのようなテーブルを持っている

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

そして、この方法で結果を表示したい

10 - 01/01/2017 - 05/01/2017
20 - 06/01/2017 - 09/01/2017
10 - 10/01/2017 - 13/01/2017

私の質問は

SELECT price, min(date), max(date) FROM mytable GROUP BY price

しかし、結果は

20 - 06/01/2017 - 09/01/2017
10 - 10/01/2017 - 13/01/2017

mysqlクエリで正しい結果を取得できますか、またはPHPソリューションを見つける必要がありますか?

回答:

回答№1は5

これはギャップと島の問題です。同じものを持つ連続したレコードの島を検出するために変数を使用できます 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

回答№2の場合-2
SELECT price, min(date), max(date) FROM mytable GROUP BY price order by price