Как сгруппировать непрерывные диапазоны, используя 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
Уникальный индекс (catid, Date, Rate) Я хотел бы, чтобы каждая категория сгруппировала все непрерывные диапазоны дат и сохранила только начало и конец диапазона. Для предыдущего примера мы бы имели:
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
Я нашел подобное решение вфорум который не совсем дал результат
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
УВИДЕТЬSQL FIDDLE Как я могу сделать то же самое в MySQL? Пожалуйста помоги!