2012-12-06 2 views
2

I가이 질문에 추가 대표 샘플 데이터를 다음과 같은 스키마 :최신 null 이외의 값을 보여 통합

SQL Fiddle

오라클 11g R2 스키마 설정 :

create table foo(id integer, att1 varchar(9), att2 varchar(9), from_at date); 
insert into foo(id, att1, att2, from_at) values(1, 'J', null, sysdate-5); 
insert into foo(id, att1, att2, from_at) values(1, null, 'L', sysdate-4); 
insert into foo(id, att1, att2, from_at) values(1, 'B', null, sysdate-3); 
insert into foo(id, att1, att2, from_at) values(1, 'C', null, sysdate-2); 
insert into foo(id, att1, att2, from_at) values(1, null, 'H', sysdate-1); 
insert into foo(id, att1, att2, from_at) values(1, 'A', 'H', sysdate); 
insert into foo(id, att1, att2, from_at) values(2, null, 'H', sysdate-1); 
insert into foo(id, att1, att2, from_at) values(2, 'A', null, sysdate); 


| ID | ATT1 | ATT2 |       FROM_AT | 
---------------------------------------------------------- 
| 1 |  J | (null) | December, 01 2012 15:13:42+0000 | 
| 1 | (null) |  L | December, 02 2012 15:13:42+0000 | 
| 1 |  B | (null) | December, 03 2012 15:13:42+0000 | 
| 1 |  C | (null) | December, 04 2012 15:13:42+0000 | 
| 1 | (null) |  H | December, 05 2012 15:13:42+0000 | 
| 1 |  A |  H | December, 06 2012 15:13:42+0000 | 
| 2 | (null) |  H | December, 05 2012 15:13:42+0000 | 
| 2 |  A | (null) | December, 06 2012 15:13:42+0000 | 

각 행을 표시하고 싶지만 값으로 att1att2을 대신 입력하십시오. 그 id. null 속성은 행이 삽입 된 이전 시간에서 변경되지 않은 것을 나타내며, 비 null 속성은 새 값을 나타냅니다. 출력은 다음과 같아야합니다

| ID | ATT1 | ATT2 | 
------------------------ 
| 1 |  J | (null) | 
| 1 |  J |  L | 
| 1 |  B |  L | 
| 1 |  C |  L | 
| 1 |  C |  H | 
| 1 |  A |  H | 
| 2 | (null) |  H | 
| 2 |  A |  H | 

답변

5

당신은 lagignore nulls으로이 작업을 수행 할 수 있습니다

검색어 :

select id, 
     nvl(att1,lag(att1 ignore nulls) over (partition by id order by from_at)) 
     as att1, 
     nvl(att2,lag(att2 ignore nulls) over (partition by id order by from_at)) 
     as att2 
from foo 

결과 :

| ID | ATT1 | ATT2 | 
------------------------ 
| 1 |  J | (null) | 
| 1 |  J |  L | 
| 1 |  B |  L | 
| 1 |  C |  L | 
| 1 |  C |  H | 
| 1 |  A |  H | 
| 2 | (null) |  H | 
| 2 |  A |  H | 
관련 문제