So gruppieren Sie fortlaufende Bereiche mit MySQL

Ich habe eine Tabelle, die Kategorien, Daten und Preise enthält. Jede Kategorie kann unterschiedliche Preise für unterschiedliche Daten haben, eine Kategorie kann nur einen Preis für ein bestimmtes Datum haben.

Id        CatId    Date        Rate 
------  ------   ------------   ---------
000001      12   2009-07-07     1
000002      12   2009-07-08     1
000003      12   2009-07-09     1
000004      12   2009-07-10     2
000005      12   2009-07-15     1
000006      12   2009-07-16     1
000007      13   2009-07-08     1
000008      13   2009-07-09     1
000009      14   2009-07-07     2
000010      14   2009-07-08     1
000010      14   2009-07-10     1

Einzigartiger Index (catid, Date, Rate) Ich möchte für jede Kategorie alle fortlaufenden Datumsbereiche gruppieren und nur den Anfang und das Ende des Bereichs behalten. Für das vorherige Beispiel hätten wir:

CatId    Begin          End            Rate 
------   ------------   ------------   ---------
12        2009-07-07    2009-07-09     1
12        2009-07-10    2009-07-10     2
12        2009-07-15    2009-07-16     1  
13        2009-07-08    2009-07-09     1  
14        2009-07-07    2009-07-07     2
14        2009-07-08    2009-07-08     1
14        2009-07-10    2009-07-10     1

Ich fand eine ähnliche Lösung indas Forum was nicht genau das Ergebnis gab

WITH    q AS
        (
        SELECT  *,
                ROW_NUMBER() OVER (PARTITION BY CatId, Rate ORDER BY [Date]) AS rnd,
                ROW_NUMBER() OVER (PARTITION BY CatId ORDER BY [Date]) AS rn
        FROM    my_table
        )
SELECT  CatId AS catidd, MIN([Date]) as beginn, MAX([Date])as endd, Rate
FROM    q
GROUP BY  CatId, rnd - rn, Rate

SEHENSQL FIDDLE Wie kann ich dasselbe in MySQL tun? Bitte helfen Sie!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage