dtnmuyoiw680512744 2016-06-17 13:25
浏览 32
已采纳

mysql:按第一个和最后一个出现的组

I have a table like the following one:

    +-------------+--------------+
    | current_day | browser      |
    +-------------+--------------+
    | 2016-05-02  | Safari       |
    | 2016-05-03  | Safari       |
    | 2016-05-04  | Safari       |
    | 2016-05-05  | Safari       |
    | 2016-05-06  | Safari       |
    | 2016-05-07  | Safari       |
    | 2016-05-08  | Safari       |
    | 2016-05-09  | Opera        |
    | 2016-05-10  | Opera        |
    | 2016-05-11  | Opera        |
    | 2016-05-12  | Opera        |
    | 2016-05-13  | Opera        |
    | 2016-05-14  | Opera        |
    | 2016-05-15  | Chrome       |
    | 2016-05-16  | Firefox      |
    | 2016-05-17  | Firefox      |
    | 2016-05-18  | Firefox      |
    | 2016-05-19  | Firefox      |
    | 2016-05-20  | Firefox      |
    | 2016-05-21  | Firefox      |
    | 2016-05-22  | Firefox      |
    | 2016-05-23  | Safari       |
    | 2016-05-24  | Safari       |
    | 2016-05-25  | Safari       |
    | 2016-05-26  | Safari       |
    | 2016-05-27  | Safari       |
    | 2016-05-28  | Safari       |
    | 2016-05-29  | Safari       |
    | 2016-05-30  | Opera        |
    | 2016-05-31  | Opera        |
    | 2016-06-01  | Opera        |
    | 2016-06-02  | Firefox      |
    | 2016-06-03  | Firefox      |
    | 2016-06-04  | Firefox      |
    | 2016-06-05  | Firefox      |
    | 2016-06-06  | Firefox      |
    | 2016-06-07  | Firefox      |
    | 2016-06-08  | Firefox      |
    | 2016-06-09  | Chrome       |
    | 2016-06-10  | Chrome       |
    | 2016-06-11  | Chrome       |
    | 2016-06-12  | Chrome       |
    | 2016-06-13  | Chrome       |
    | 2016-06-14  | Chrome       |
    | 2016-06-15  | Chrome       |
    | 2016-06-16  | Chrome       |
    +-------------+--------------+

I would like to extract the first and last occurrence of each sequence in the 'browser' column, in other words the following result:

    +-------------+--------------+
    | current_day | browser      |
    +-------------+--------------+
    | 2016-05-02  | Safari       |
    | 2016-05-08  | Safari       |
    | 2016-05-09  | Opera        |
    | 2016-05-14  | Opera        |
    | 2016-05-15  | Chrome       |
    | 2016-05-16  | Firefox      |
    | 2016-05-22  | Firefox      |
    | 2016-05-23  | Safari       |
    | 2016-05-29  | Safari       |
    | 2016-05-30  | Opera        |
    | 2016-06-01  | Opera        |
    | 2016-06-02  | Firefox      |
    | 2016-06-08  | Firefox      |
    | 2016-06-09  | Chrome       |
    | 2016-06-16  | Chrome       |
    +-------------+--------------+

Is it possible/convenient to create a MYSQL query? Or is it better to extract all results and perform some post-processing with php?

  • 写回答

4条回答 默认 最新

  • douxi1968 2016-06-17 13:33
    关注

    You can use the following query:

    SELECT MIN(current_day) AS start_day, 
           MAX(current_day) AS stop_day, 
           browser
    FROM (
       SELECT current_day, browser,
              @grp := IF(@br = browser, @grp,
                         IF(@br := browser, @grp+1, @grp+1)) AS grp
       FROM mytable 
       CROSS JOIN (SELECT @grp := 0, @br := '') AS vars
       ORDER BY current_day) AS t
    GROUP BY browser, grp
    

    The above query uses variables, in order to identify islands of consecutive records having the same browser value. It returns a single row per browser. You have to repeat the same subquery twice and use UNION if you want to get two separate lines for each of the min/max dates.

    Demo here

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程