2016-08-19 1 views
1

일부 도움주세요? SQL을 작성하는 방법을 배우기 시작한 멍청한 놈.이 문제에 부딪쳤다. 나는 MAX 기능을 사용하는 방법을 안다.하지만이 모든 요구 사항을 함께 결합하는 방법을 알 수 없다. AccountsBooks
찾고 : : 나는테이블 및 최대 기능을 결합한 SQL Oracle

Accounts          
ID Series YesorNot Dated Filed  Plan Year  
1 123  Yes   06/12/2015  2015   
2 123  No   06/12/2015  2015   
3 145  Yes   06/06/2015  2015 
4 145  No   02/02/2015  2014   
5 198  Yes   02/03/2015  2015   
6 187  Yes   02/14/2013  2013    
7 153  Yes   01/02/2011  2011   

Books  
Primary Key Date Created ID 
1   06/13/2015  123 
2   06/12/2015  123 
3   06/07/2015  145 
4   02/02/2015  145 
5   02/03/2015  198 

두 테이블 (아래 데이터의 예입니다) 두 개의 테이블, AccountsBooks
프로젝트 ID로 두 테이블에 존재 1. 데이터 = 기본 키
2. 하나만의 unqiue 시리즈 (시리즈도 ID)
3. 계획 연도의 값이 가장 최근 값인 MAX을 입력하고 계획 연도와 중복되는 값이있는 경우 MAX (가장 최근의) 값. 당신은 할 수 있었어야

SELECT B.Primary_Key as Project_ID, A.Series, A.YesorNot, A.Date_Filed, A.Plan_Year 
FROM Books B 
JOIN Accounts A ON B.ID = A.Series 

:

Project ID Series YesorNot Dated Filed Plan Year  
1   123  Yes  06/12/2015 2015   
3   145  Yes  06/06/2015 2015   
4   145  No  02/02/2015 2014   
5   198  Yes  02/03/2015 2015 
+0

임시 테이블 세트를 만들지 않고 가능한 출력이 적은 상황 (조건 3으로 인해)은 어렵습니다. YesOrNot = No 인 경우 동일한 계획 연도가있는 계정의 동일한 계열에 대해 항상 여러 행을 나타냅니다. –

+1

"Project ID = Primary Key로 두 테이블에 모두 존재하는 데이터"란 무엇을 의미합니까? 프로젝트 ID 란 무엇입니까? 그렇다면 - 첫 번째 테이블의 Series와 두 번째 테이블의 ID가 일치하는 두 개의 테이블이 아닌가? 한 쌍 이상의 열에 "일치하는"테이블이 없기를 바랍니다. – mathguy

+0

@ BenHamilton - 분석 함수에 익숙하십니까? – mathguy

답변

0

먼저 테이블을 조인 :
4. 난 그냥 Project ID, Series는, YesorNot는, Date FiledPlan Year 그래서 내 출력은 다음과 같이해야 열 필요 이 문제를 스스로 해결하기 위해서는 (그리고 질문의 일부로 게시 했어야합니다.) 내가 다른 직업을 찾지 못한다면 말입니다. 당신은 지금 약간 더 단단한 부분이 될 수 있다고 가정합니다.

이제 우리는 당신의 기준

ROW_NUMBER() PARTITION BY (B.Primary_Key, A.Series, A.YesorNot, A.Date_Filed ORDER BY A.Date_Year DESC, B.Date_Created DESC) AS RN 

에 따라 행 번호를 추가 지금 바로 행 번호의 첫 번째 걸릴.

SELECT Project_ID, Series, YesorNot, Date_Filed, Plan_Year 
FROM (
    SELECT B.Primary_Key as Project_ID, A.Series, A.YesorNot, A.Date_Filed, A.Plan_Year, 
     ROW_NUMBER() PARTITION BY (B.Primary_Key, A.Series, A.YesorNot, A.Date_Filed ORDER BY A.Date_Year DESC, B.Date_Created DESC) AS RN 
    FROM Books B 
    JOIN Accounts A ON B.ID = A.Series 
) X 
WHERE RN = 1