2012-02-28 4 views
2

나는 끊임없이 질의되어야하는 거대한 포스트그레스 데이터베이스를 가지고있다. 질질 끄는 데이터 집합에는 반복되는 순차 값이 많이 있습니다. 예 :데이터베이스 쿼리에서 반복되는 순차 값을 무시하는 방법

3,4,5,1,1,1,1,1,1,1 ... 1,1,1,1,1,8 

은 반복 값 시퀀스의 경우 그 시퀀스의 처음과 마지막 레코드를 반환 할 수 있는가? 예 :

 

If the data is: 
3,4,5,1,1,1,1,1,1,1 ... 1,1,1,1,1,8 
The query result should be: 
3,4,5,1*,1**,8 

* first occurrence of "1" 
** last occurrence of "1" 
 

편집 : I가 [값 created_at]로 구성되어있어 선택
행, created_at 발주.
차트에이 정보를 표시해야하므로 첫 번째와 마지막 항목을 가져 오는 것이 중요합니다. 그 사이의 값은 무시할 수 있습니다.

+0

시퀀스가 ​​행 또는 열로 반환 되었습니까? – ChristopheD

+0

고유 한 값을 얻는 것이 효과가없는 이유가 있습니까? –

+0

@ChristopheD 행, 각 행은 [값, created_at]로 구성됩니다 – marcosbeirigo

답변

3

당신은 비교적 쉽게이 일을 LAG과 LEAD를 사용할 수 있습니다 created_at의 값이 고유하지 않은 경우

with T(n,created_at,bef,aft) as (
    select 
    n, 
    created_at, 
    lag(n,1) over (order by created_at), 
    lead(n,1) over (order by created_at) 
    from your_table 
) 
    select 
    n, 
    created_at 
    from T 
    where bef is distinct from n 
    or aft is distinct from n; 

, 당신은 지연() 및 납 있도록 목록에 의해 순서를 구별 열을 추가한다() 표현식은 결정적입니다.

+2

두 개의 nots가 너무 많습니다. –

+1

Aargh. 그것은 IS DISTINCT FROM이어야하며, DISTINCT FROM이 아닐 수 없습니다. 필자는 SQL Server에서이 기능을 테스트하지 않았지만 해결할 것입니다. –

+0

감사합니다. – marcosbeirigo

관련 문제