Mam tabelę zawierającą kategorie, daty i stawki. Każda kategoria może mieć różne stawki dla różnych dat, jedna kategoria może mieć tylko jedną stawkę w danej dacie.Jak grupować ciągłe zakresy przy użyciu MySQL
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
Indeks Unique (CatID, Data Rate) chciałbym dla każdej kategorii do grupy wszystkich ciągłych zakresów dat i zachować tylko początek i koniec zakresu. Na poprzednim przykładzie, to mamy:
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
znalazłem podobnego rozwiązania w the forum które nie dokładnie daje wynik
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
zobaczyć SQL FIDDLE Jak mogę zrobić to samo w mysql ? Proszę o pomoc!
Dlaczego swój przykładowy pokaz dla '(CatID, Rate) = (14,1) "wynikowy zakres od" 2009-07-08 "do" 2009-07-10 ", gdy nie ma" 2009-07-09 "w tabeli podstawowej? c.f. '(CatId, Rate) = (12,1)', który daje dwa wynikające zakresy ze względu na swoją nieciągłość. – eggyal
Dzięki eggyal, teraz jest to poprawione – Fouzi