2017-09-21 1 views
1

다음과 같은 테이블을 고려하십시오.Distinct 행 선택 및 고유하지 않은 식별자 포함

ID Value Change_Date 
1 A  1/1/2017 
1 B  1/2/2017 
1 B  1/3/2017 
2 C  1/1/2017 
2 C  1/3/2017 
3 D  1/1/2017 
3 E  1/3/2017 
3 F  1/4/2017 
3 D  1/10/2017 

I 효과적으로 구별을 수행하지만 구별 행의 첫번째 발생의 시간적 CHANGE_DATE 값을 포함하는 선택 명령문을 실행하고 싶다. 따라서 위의 표는 다음과 같이 렌더링됩니다.

ID Value Change_Date 
1 A  1/1/2017 
1 B  1/2/2017 
2 C  1/1/2017 
3 D  1/1/2017 
3 E  1/3/2017 
3 F  1/4/2017 
3 D  1/10/2017 

오라클에서도 원격으로이 작업을 수행 할 수 있습니까? 나는 감사 테이블에서 일련의 더미 업데이트를 제거하려고 시도하지만 change_date가 필요하므로 가치에서 가치로 바뀌었을 때를 보여줄 수 있습니다.

select distinct id, value from my_table 

같은 쿼리는 분명 나에게 정보를 씨앗 얻을 것이다,하지만 적절한 날짜로 다시 묶을 필요가있다. 아마도 min과 change_date를 사용할 수는 있지만, 이는 id 3의 첫 번째 행이 id 3의 마지막 행과 동일하다는 것을 의미합니다. 이는 올바르지 않습니다.

편집 : ID와 값에 대해 단순한 별개의 것을 찾지는 않습니다. ID 3 에서처럼 이전 값으로 다시 전환 할 때도 포함해야합니다. ID 3의 네 가지 값은 모두 출력에 보존되어야합니다.

답변

1

여러 ID/값 쌍이 연속 될 때 첫 번째 행만 필요합니다. lag() :

select t.* 
from (select t.*, 
      lag(value) over (partition by id order by change_date) as prev_value 
     from t 
    ) t 
where prev_value is null or prev_value <> value; 
관련 문제