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!