최신데이터만 추출 쿼리 요청 0 6 1,102

by 초보oracle [SQL Query] [2016.03.25 14:33:20]


안녕하세요

쿼리 요청드릴게 있어서 올립니다.

emp

name title
파랑 사원
노랑 대리
주황 대리
분홍 과장

 

emp_up 테이블에 4개의 컬럼이 있습니다.

name date title
파랑 2015-03-03 주임
노랑 2015-03-03 과장
파랑 2016-03-25 대리
노랑 2016-03-25 차장

매일하루에 emp_up테이블에 변경된 내용이 있을시 emp_up 테이블로 데이터가 들어옵니다.

구분자는 N으로 하여 하루에 변경이 되면 Y로 변경이 됩니다.

emp_up 테이블에서 이름은 중복되지만 변경된내용은 중복이 되지않아

최신날짜로 변경된 사람들만 뽑고 싶은데 어떻게 해야할까요??

예로 4개만보여줫지 데이터는 엄청 많습니다.

 

by 마농 [2016.03.25 15:29:06]

질문이 좀 매끄럽지 않고 모호한 부분이 많은데요.
 - 구분자의 의미와 N 에서 Y 로 변경되는 의미가?
 - 최신날짜로 변경된 사람들을 뽑겠다는 말의 정확한 의미가?


by 초보oracle [2016.03.25 16:04:07]

간단하게 말씀드리면 

한사람이 진급하거나 부서가 변경될시

emp_up이라는 테이블로 들어옵니다. a라는 컬럼에 N으로해서 데이터가 들어옵니다.

N인 값들을 emp와 비교하여 변경되거나 추가된거에 대해 그값을 변경해주고 추가해줍니다.

그러고나서 emp_up 테이블의 N값을 Y로 바꿔줍니다.

또 동일한 사용자가 진급하거나 부서가 변경되면 또다시 데이터가 emp_up에 들어오고 그값을 emp와 비교하여 변경해줍니다. 그러고 a컬럼의 N값을 Y로 바꿔줍니다.

이게 매일 한번 실행을 하는데

결론으로 제가 알고 싶은거는

동일한 사용자가 변경된값들이 emp_up 테이블에 많이 있는데 이중에 최근날짜로 변경된 값만 보고싶습니다.

위의 emp_up 테이블에 4개의 데이터가있는데 결과로 보고싶은거는

name date
파랑 2016-03-25
노랑 2016-03-25

입니다.


by swlee [2016.03.25 16:21:37]
with emp (nm, title) as (
select '파랑', '사원' from dual union all 
select '노랑', '대리' from dual union all 
select '주황', '대리' from dual union all 
select '분홍', '과장' from dual),
emp_up (nm, dt, title) as ( 
select '파랑','2015-03-03','주임' from dual union all
select '노랑','2015-03-03','과장' from dual union all 
select '파랑','2016-03-25','대리' from dual union all 
select '노랑','2016-03-25','차장' from dual)
select nm,dt
from (select a.nm, a.title,b.dt,row_number() over(partition by a.nm order by dt desc) rn
        from emp a, emp_up b
        where a.nm = b.nm
          and a.title <> b.title)
where rn = 1;

 


by 초보oracle [2016.03.25 17:44:19]

답변 감사합니다!!


by 마농 [2016.03.28 08:28:49]
SELECT nm
     , MAX(dt) dt
  FROM emp_up
 GROUP BY nm
;

 


by 초보oracle [2016.03.29 09:41:15]

답변 감사합니다!!!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입