창 기능을 사용하여 해결할 수 있다고 생각되는 상황이 있지만 확실하지 않습니다.
다음 표를 상상해보십시오
CREATE TABLE tmp
( date timestamp,
id_type integer
) ;
INSERT INTO tmp
( date, id_type )
VALUES
( '2017-01-10 07:19:21.0', 3 ),
( '2017-01-10 07:19:22.0', 3 ),
( '2017-01-10 07:19:23.1', 3 ),
( '2017-01-10 07:19:24.1', 3 ),
( '2017-01-10 07:19:25.0', 3 ),
( '2017-01-10 07:19:26.0', 5 ),
( '2017-01-10 07:19:27.1', 3 ),
( '2017-01-10 07:19:28.0', 5 ),
( '2017-01-10 07:19:29.0', 5 ),
( '2017-01-10 07:19:30.1', 3 ),
( '2017-01-10 07:19:31.0', 5 ),
( '2017-01-10 07:19:32.0', 3 ),
( '2017-01-10 07:19:33.1', 5 ),
( '2017-01-10 07:19:35.0', 5 ),
( '2017-01-10 07:19:36.1', 5 ),
( '2017-01-10 07:19:37.1', 5 )
;
id_type 열에서 변경 될 때마다 새 그룹을 만들고 싶습니다. EG 1 차 그룹 7:19:21에서 7:19:25, 2 차 시작 및 마무리 7:19:26 등.
작동 한 후 그룹을 정의하기위한 더 많은 기준을 포함하고 싶습니다.
현재 아래 쿼리를 사용하여 ...
SELECT distinct
min(min(date)) over w as begin,
max(max(date)) over w as end,
id_type
from tmp
GROUP BY id_type
WINDOW w as (PARTITION BY id_type)
order by begin;
다음과 같은 결과가 나타납니다.
begin end id_type
2017-01-10 07:19:21.0 2017-01-10 07:19:32.0 3
2017-01-10 07:19:26.0 2017-01-10 07:19:37.1 5
내가 원하는 동안 :
begin end id_type
2017-01-10 07:19:21.0 2017-01-10 07:19:25.0 3
2017-01-10 07:19:26.0 2017-01-10 07:19:26.0 5
2017-01-10 07:19:27.1 2017-01-10 07:19:27.1 3
2017-01-10 07:19:28.0 2017-01-10 07:19:29.0 5
2017-01-10 07:19:30.1 2017-01-10 07:19:30.1 3
2017-01-10 07:19:31.0 2017-01-10 07:19:31.0 5
2017-01-10 07:19:32.0 2017-01-10 07:19:32.0 3
2017-01-10 07:19:33.1 2017-01-10 07:19:37.1 5
이 첫 번째 단계를 해결 한 후 그룹을 나누기위한 규칙으로 사용할 열을 더 추가하고 나머지는 널 입력 가능합니다.
Postgres 버전 : 8.4 (Postgis를 사용하는 Postgres가 있으므로 업그레이드하기가 쉽지 않습니다. Postgis 함수는 이름을 변경하고 다른 문제가 있지만, 이미 모든 내용을 다시 작성하고 새 버전은 최신 버전 9.X를 사용합니다. postgis 2.x)