How to group continuous ranges using MySQL

前端 未结 3 1397
温柔的废话
温柔的废话 2020-12-03 22:29

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.

3条回答
  •  广开言路
    2020-12-03 23:04

    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

提交回复
热议问题