2017-03-23 1 views
0

대출 금액, 연간 소득, 연도 (MMM-YY 형식) 및 멤버 ID가있는 대출 테이블이 있습니다. 나는 재정적 인 연간 소득과 회원 ID 세부 사항을 따라 1 년 안에 가장 많은 대출 금액을 찾고자합니다.HIVE의 캐스트 별칭 사용

가 나는 회원 ID와 연간 소득 정보를 가져 오기 위해 또한 원하는 코드를 다음

select max(cast(loan_amt as int)),issue_d from loan group by issue_d; 

을 사용하여 올해 그룹에 가장 높은 대출 금액을 시도 그래서 나는

는하지만, 그것이 다음과 같은 코드를 작성 캐스팅 된 열에 별칭을 사용하는 것에 대한 오류 메시지가 나타납니다.

코드 : 무엇 당신이 원하는 것은 순위 양에 따라 기록이다

select a.loan_amt,a.member_id,a.annual_inc,a.issue_d 
from 
(select loan_amt,member_id,annual_inc,issue_d from loan) a 
join 
(select max(cast(loan_amt as int)) as ml,issue_d from loan group by issue_d) c 
where ((a.issue_d=c.issue_d) and (a.loan_amt=a.ml)); 
+0

rank 또는 dense_rankrow_number을 대체 할 코드는 실제로 대신에 사용 두 번째 j의 where와 c.ml 오인 상태? –

+0

좋은 해결책을 요구하는 대신 기술적으로 문제가있는 해결책을 고치려고합니다. –

+0

P. MMM-YY는 나쁜 디자인이므로 캐스팅해야하는 loan_amt도 있습니다. –

답변

0

, 기간 당, 각 기간에 대해서만 상위 1 기록을 유지.
그 목적을 위해 정확하게 설계된 analytic functions 중 하나를 사용하십시오. 하이브는 해당 주제에 대한 SQL 표준을 상당히 잘 지원합니다.

당신은 관계에 대해 무엇을 말을하지 않기 때문에 (즉, 어떤 여러 대출은 같은 금액 ??? 경우) 당신이 단지 하나 개의 레코드가 무작위로을 선택한다고 가정을 ...

select X, Y, Z, Period, Amount as TopAmount 
from 
(select X, Y, Z, Period, cast(StrAmt as double) as Amount, 
    row_number() over (partition by Period order by cast(StrAmt as double) desc) as TmpRank 
    from WTF 
) TMPWTF 
where TmpRank =1 

당신이 모든를 원한다면 상단의 양에와 기록은 (그러나 상위 1, 상위 2의 차이를 만들 것 "밀도"물건)