如何获取MySQL中连续数据的第一条和最后一条记录?

如何获取MySQL中连续数据的第一条和最后一条记录?,mysql,sql,Mysql,Sql,我正在调查我运行的各种程序的执行时间。首先,我从一个查询中得到一个结果,如: +------------+---------------------+ + program + start_time + +------------+---------------------+ | aaa | 2015-04-01 22:18:13 | | aaa | 2015-04-01 22:18:19 | | aaa | 2015-04-01

我正在调查我运行的各种程序的执行时间。首先,我从一个查询中得到一个结果,如:

+------------+---------------------+
+ program    + start_time          +
+------------+---------------------+
| aaa        | 2015-04-01 22:18:13 |
| aaa        | 2015-04-01 22:18:19 |
| aaa        | 2015-04-01 22:18:35 |
| aaa        | 2015-04-01 22:29:18 |
| bbb        | 2015-04-01 22:29:32 |
| bbb        | 2015-04-01 22:31:38 |
| bbb        | 2015-04-01 22:41:11 |
| ccc        | 2015-04-01 22:41:20 |
| ccc        | 2015-04-01 22:42:01 |
| ccc        | 2015-04-01 23:04:05 |
| ccc        | 2015-04-01 23:04:13 |
| aaa        | 2015-04-01 23:06:06 |
| aaa        | 2015-04-01 23:22:40 |
| aaa        | 2015-04-01 23:23:27 |
| aaa        | 2015-04-01 23:24:15 |
| ddd        | 2015-04-01 23:36:15 |
| ddd        | 2015-04-01 23:36:17 |
| ddd        | 2015-04-01 23:36:21 |
+------------+---------------------+
它是这样显示的,因为每个程序都有不同的测试选项,所以每个选项都有一个测试的开始时间。不要担心执行时间,我只想知道每个旗标集的大致时间。从这个表中,我们可以看到,程序aaa有两个集合,第一个在开始,第二个在ddd之前。每个标志集应单独计算

我想计算每个连续程序的时间,用一种简单的方法,我想得到连续部分的第一次记录时间和最后一次记录时间,如:

+------------+---------------------+
+ program    + start_time          +
+------------+---------------------+
| aaa        | 2015-04-01 22:18:13 |
| aaa        | 2015-04-01 22:29:18 |
| bbb        | 2015-04-01 22:29:32 |
| bbb        | 2015-04-01 22:41:11 |
| ccc        | 2015-04-01 22:41:20 |
| ccc        | 2015-04-01 23:04:13 |
| aaa        | 2015-04-01 23:06:06 |
| aaa        | 2015-04-01 23:24:15 |
| ddd        | 2015-04-01 23:36:15 |
| ddd        | 2015-04-01 23:36:21 |
+------------+---------------------+
前面的解决方案就足够了。但理想情况下,最好知道每个程序的确切时间间隔,因此此问题的理想结果是最后一次记录时间-第一次记录时间,如:

+------------+---------------+
+ program    + time_interval +
+------------+---------------+
| aaa        | 00:11:15      |
| bbb        | 00:11:39      |
| ccc        | 00:22:53      |
| aaa        | 00:18:09      |
| ddd        | 00:00:06      |
+------------+---------------+

好吧,这不是一个任务,但我是MySQL的新手。任何帮助都将不胜感激

您可以使用变量枚举组,然后进行聚合以获得所需的:

select program, min(start_time), max(start_time)
from (select r.*,
             (@rn := if(@p = program, @rn,
                        if(@p := program, @rn + 1, @rn + 1)
                       )
             ) as rn
      from result r cross join
           (select @p = '', @rn := 0) vars
      order by program, start_time
     ) r
group by program, rn;

按程序排序,开始时间
?谢谢,因为结果来自另一个select查询,不知道如何将该查询插入此查询?@BrianYang。将该查询设为子查询,其中
结果
为。