2016-07-13 2 views
1

나는 시스템이 특정 상태에있는 모든 기간을 찾으려고합니다. 상태가 테이블에 기록됩니다. 내가보고 싶은포스트 그레스 전환을 발견

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 

거기에 다음과 같이 데이터의 예는? 이 같은

답변

2

뭔가 작업을해야합니다 :

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 

내부 쿼리는 섬 같은 State 값을 갖는 연속 기록의를 식별하기 위해 표준 기술을 사용합니다. 외부 쿼리는 계산 열 grp ~ GROUP BY을 사용하고 Start, End 값이 각각 이되도록합니다.

+0

이것은 정확히 내가 원하는 것입니다. 큰! –