我有以下示例,我想对数据更改的数据进行分组。
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个数据。我想根据状态变化对数据进行分组。
答案 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;