2014-07-08 3 views
0

에 의해 처음 발견 행을 반환 나는 다음과 같은 형식의 데이터를 가지고 :오라클 SQL - 값

내가 YRMTH 및 이벤트와 ID 당 하나 개의 행을 반환 할
ID  YRMTH  EVENT 
1  201201  0 
1  201202  0 
1  201203  1 
1  201204  0 
1  201205  0 
2  201304  0 
2  201305  0 
2  201306  0 
3  201301  0 
3  201302  0 
3  201303  0 
3  201304  1 
3  201305  0 

. EVENT (= 0)가 발생하지 않은 경우 YRMTH 및 EVENT = 0에 나열된 지난 달을 반환하려고합니다.

ID  YRMTH  EVENT 
1  201203  1 
2  201306  0 
3  201304  1  

기본적으로,이 쿼리의 의도는 하나 전혀 발생하면 이벤트가 발생했을 때 첫 달 식별하는 것입니다 :이 예에서

, 나는 다음과 같은 출력을합니다. 이벤트가 발생하지 않은 경우 데이터가있는 지난 달을 원합니다.

나는 창 함수 (PARTITION BY)를 사용할 필요가 있다고 생각하지만 가능한 모든 해결책을 공개합니다.

답변

2

집계를 사용하여이 작업을 수행 할 수 있습니다. 분석 기능이 필요하지 않습니다 :

select id, 
     (case when max(event) = 1 then min(case when event = 1 then yrmth end) 
      else max(yrmth) 
     end) as yrmth, 
     max(event) as event   
from table t 
group by id; 
+0

내가 ..이 생각 만하면'= 1''MIN()가'권리를 줄 것이다? –

+0

@MaheswaranRavisankar. . . 이제는 논리를 수정했습니다. –

+0

+1 Thumps up !!! 좋은 속임수. –

0

이 시도 :

with cte as 
(select id, 
case event 
when 1 then yrmth 
else max(yrmth) over (partition by id order by yrmth) 
end as yrmth, 
event, 
row_number() over 
(partition by id 
    order by case event when 1 then 1 else 0 end desc, yrmth desc) as rn 
from your_table) 

select id, yrmth, event 
from cte 
where rn = 1 

SQLFiddle