首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按只排序MYSQL的日期范围分组

问按只排序MYSQL的日期范围分组
EN

Stack Overflow用户
提问于 2016-01-11 13:08:10
回答 2查看 48关注 0票数 2

我正在尝试生成一个日期范围序列,并将日期放在第二行,如果排序在MYSQL中是值的话。

代码语言:javascript
复制
    fldDate        TotalNo
    2015-04-01       10
    2015-04-02       10
    2015-04-03       5
    2015-04-04       10
    2015-04-05       10

我正在寻找mysql查询,如下所示:

代码语言:javascript
复制
    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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-11 13:16:28

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

一旦确定了组,最后的结果就是简单的聚合:

代码语言:javascript
复制
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;

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

票数 0
EN

Stack Overflow用户

发布于 2016-01-11 13:16:40

像这样的事情应该有效:

代码语言:javascript
复制
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将增加一个以表示下一个序列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34722366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档