Sql 研究生发现转变

Sql 研究生发现转变,sql,postgresql,gaps-and-islands,Sql,Postgresql,Gaps And Islands,我试图找出系统处于特定状态的所有时间段。该状态被记录到一个表中。数据示例如下所示: Time - State 12:00 - 1 12:01 - 1 12:02 - 1 12:03 - 1 12:04 - 0 12:05 - 0 12:06 - 0 12:07 - 1 12:08 - 1 我希望看到的结果是: Start - End - State 12:00 - 12:03 - 1 12:04 - 12:06 - 0 12:07 - 12:08

我试图找出系统处于特定状态的所有时间段。该状态被记录到一个表中。数据示例如下所示:

Time - State  
12:00 - 1  
12:01 - 1  
12:02 - 1  
12:03 - 1  
12:04 - 0  
12:05 - 0  
12:06 - 0  
12:07 - 1  
12:08 - 1
我希望看到的结果是:

Start - End - State  
12:00 - 12:03 - 1  
12:04 - 12:06 - 0  
12:07 - 12:08 - 1  

是否有任何预定义的函数来查找转换记录

像这样的方法应该会奏效:

SELECT "State",
       MIN("Time") AS Start,
       MAX("Time") AS End     
FROM (
  SELECT "Time", "State",
         ROW_NUMBER() OVER (ORDER BY "Time") - 
         ROW_NUMBER() OVER (PARTITION BY "State" ORDER BY "Time") AS grp
  FROM mytable) AS t
GROUP BY "State", grp  

内部查询使用标准技术来识别具有相同
状态
值的连续记录孤岛。外部查询使用计算列
grp
分组,并获取每个岛的
Start
End
值。

这正是我所希望的。伟大的