2014-03-31 3 views
0

나는 SQL 쿼리 세계에서 초보자입니다. 중복 직원 #을 제거하고 강조 표시된 행만 검색해야합니다. 도움을 주시면 감사하겠습니다.ORACLE의 SQL 쿼리 - 가장 최근 날짜 선택

Staff#  Pay_DT  Due_DT  loan_flag housing 
------------------------------------------------------------------------ 
123-45-6789  14-Feb-14 3-Jan-14 Y  null 
123-45-6789  14-Feb-14 3-Jan-14 Y  Annual 
123-45-6789  14-Feb-14 13-Jan-14 Y  null 
**123-45-6789 14-Feb-14 13-Jan-14 Y  Annual** 
123-45-6789  null  null  Y  null 
123-45-6789  null  null  Y  Annual 
+2

왜 그 행입니까? 귀하의 주제는 "가장 최근 날짜"에 대해 이야기합니다. 당신은 어떤 날짜인지 말하지 않습니다. 동일한 최대'pay_dt '를 갖는 4 개의 행이 있습니다. 동일한 최대'pay_dt'와'due_dt'를 갖는 두 개의 행이 있습니다. 왜 다른 하나를 선택합니까? –

+0

한 행만 반환 하시겠습니까? – Coffee

+0

이것은 기록 데이터입니다. 나는 주택이 연례로 설정되고 지불이 이루어진 유료 DT를 알아야합니다. 신속한 답변에 감사드립니다. – user3482634

답변

0

은 아마 당신은 다른 방법으로

SELECT * 
    FROM (SELECT a.*, 
       rank() over (partition by staff# order by pay_dt desc) rnk 
      FROM table_name a 
     WHERE housing = 'Annual') 
WHERE rnk = 1 

SELECT * 
    FROM (SELECT a.*, 
       max(pay_dt) over (partition by staff#) max_pay_dt 
      FROM table_name a 
     WHERE housing = 'Annual') 
WHERE pay_dt = max_pay_dt 

원하는 당신은 관계합니다 (housing 열이 Staff# 특정에 대한 Annual의 값이 같은 pay_dt 두 행이있을 수있는 경우 값이 있으면이 두 쿼리는 모두 해당 조건의 모든 행을 반환합니다. 임의로 연결을 끊으려는 경우, rank 대신 row_number을 사용할 수 있습니다. 그렇지 않으면, 당신은 우리가 당신이 넥타이를 깰 때 사용할 논리를 말해 줄 필요가 있습니다.