按日期排序仅按顺序排列MYSQL

时间:2016-01-11 13:08:10

标签: mysql date date-range

我正在尝试生成日期范围序列,如果在MYSQL中按顺序排序,则将日期放在第二行

    fldDate        TotalNo
    2015-04-01       10
    2015-04-02       10
    2015-04-03       5
    2015-04-04       10
    2015-04-05       10

我正在寻找mysql查询来获取它如下:

    start_dt         end_dt        TotalNo 
    2015-04-01       2015-04-02      10
    2015-04-03       2015-04-03       5
    2015-04-04       2015-04-05      10

我发现了一个类似的问题,但我在mysql中翻译时遇到了困难: link to post

2 个答案:

答案 0 :(得分:0)

您希望识别具有相同TotalNo的相邻行组。关键是要识别识别这些组的东西。一个度量是TotalNo的值的数量,它们与行中的值不同。如果您的数据不是很大,则可以使用相关的子查询。

确定群组后,最终结果只是汇总:

select min(fldDate) as start_dt, max(fldDate) as end_dt, TotalNo
from (select t.*,
             (select count(*)
              from t t2
              where t2.fldDate < t.fldDate and t2.TotalNo <> t.TotalNo
             ) as grp
      from t
     ) t
group by grp, TotalNo;

对于大量数据,您使用变量而不是相关子查询。

答案 1 :(得分:0)

这样的事情应该有效:

SELECT MIN(fldDate) AS start_dt, MAX(fldDate) AS end_dt, TotalNo
FROM (
  SELECT fldDate, TotalNo,      
         @grp := IF(@t = TotalNo, @grp, 
                    IF(@t := TotalNo, @grp + 1, @grp + 1)) AS grp
  FROM mytable
  CROSS JOIN (SELECT @grp := 0, @t := 0)
  ORDER BY fldDate ) AS t
GROUP By TotalNo, grp

@grp变量标识具有相同 TotalNo值的连续记录的行。当TotalNo序列中断时,@grp会增加1,以表示下一个序列。