分组状态变化

时间:2015-06-13 00:53:09

标签: sql sql-server sql-server-2008

我有以下示例,我想对数据更改的数据进行分组。

My table:
id  Status  time
1   a      20/6/2015 8:00
2   a      20/6/2015 8:46
3   a      20/6/2015 9:00
4   b      20/6/2015 9:00
5   b      20/6/2015 9:16
6   a      20/6/2015 9:17
7   a      21/6/2015 9:20

示例输出:

Status  mintime          maxtime
a      20/6/2015 8:00   20/6/2015 9:00
b      20/6/2015 9:00   20/6/2015 9:16
a      20/6/2015 9:17   21/6/2015 9:20

基本上我想将状态数据分组,仅在状态发生变化时才获取数据的最小和最大时间。

我的问题,如果我在状态栏上使用分组,那么我将得到如下 状态mintime maxtime

a   20/6/2015 8:00  21/6/2015 9:20
b   20/6/2015 9:00  20/6/2015 9:16

我不希望上面的输出返回2个数据。我想根据状态变化对数据进行分组。

1 个答案:

答案 0 :(得分:3)

您可以使用不同的行号方法执行此操作。 row_number() - 与特定参数的区别 - 标识组。其余的只是聚合:

select status, min(time), max(time)
from (select t.*,
             (row_number() over (order by time) -
              row_number() over (partition by status order by time)
             ) as grp
      from mytable t
     ) t
group by status, grp;