2014-07-20 2 views
0

일부 레코드의 특정 특성이 null이 아닌 값으로 설정된 테이블이 있습니다. 이 레코드 바로 뒤에있는 모든 레코드를 가져오고 싶습니다 (created_at 열에 의해 정렬 된 경우). 그래서PostgreSQL에 특정 속성이 설정된 모든 레코드 다음에 첫 번째 레코드를 가져 오는 방법은 무엇입니까?

id | factor | created_at 
1 | NULL | 2001-01-01 
2 | 1.2 | 2001-01-02 
3 | NULL | 2001-01-03 
4 | NULL | 2001-01-04 
5 | 0.9 | 2001-01-05 
6 | NULL | 2001-01-06 
7 | 1.1 | 2001-01-07 
8 | NULL | 2001-01-08 
9 | NULL | 2001-01-09 
10 | 1.1 | 2001-01-10 
11 | NULL | 2001-01-11 

과 :

여기에 샘플 데이터입니다. 이 경우 ID가 3, 6, 8 및 11 인 레코드를 가져오고 싶습니다. PostgreSQL 9.3에서 어떻게 든 가능합니까? 실제 응용 프로그램에서는 ids이 반드시 순차적 일 필요는 없습니다. user_id 열도 있습니다. 동일한 user_id 값을 가진 레코드 만 가져오고 있습니다. 여기에 유용 할 수도있는 윈도우 함수에 대한 내용을 조금 읽었습니다. 그러나이 경우에 어떻게 사용하는지 잘 모르겠습니다.

+0

은 '전무가'널 의미 하는가 또는 '전무'로 저장 실제 값이? –

+0

죄송합니다, 너무 많은 루비 :) 그것은 NULL입니다. – szimek

+0

아, 잡챠. 지연 기능이 트릭을해야한다고 생각합니다 (내 대답을 참조하십시오) –

답변

5

보십시오 : 귀하의 예에서

select id, factor, created_at 
    from (select id, 
       factor, 
       created_at, 
       lag(factor, 1) over(order by created_at) as prev_factor 
      from tbl 
     order by created_at) x 
where factor is null 
    and prev_factor is not null 
+0

정말 고마워요, 완벽하게 작동합니다! – szimek

관련 문제