I have a table that contains categories, dates and rates. Each category can have different rates for different dates, one category can have only one rate at a given date.
SELECT catid,min(ddate),max(ddate),rate
FROM (
SELECT
Catid,
Ddate,
rate,
@rn := CASE WHEN (@prev <> rate
or DATEDIFF(ddate, @prev_date)>1) THEN @rn+1 ELSE @rn END AS rn,
@prev := rate,
@prev_id := catid ,
@prev_date :=ddate
FROM (
SELECT CatID,Ddate,rate
FROM rankdate
ORDER BY CatID, Ddate ) AS a ,
(SELECT @prev := -1, @rn := 0, @prev_id:=0 ,@prev_date:=-1) AS vars
) T1 group by catid,rn
Note: The line (SELECT @prev := -1, @rn := 0, @prev_id:=0 ,@prev_date:=-1) AS vars is not necessary in Mysql Workspace, but it is in the PHP mysql_query function.
SQL FIDDLE HERE