2012-06-20 2 views
0

Teradata에서 MEM TABLE에있는 모든 구성원을 먼저 식별하고 지금은 마이너스 잔액이있는 질문이 필요합니다. 전화 번호는 CUR_BAL입니다. 그런 다음 모든 해당 회원에 대해서만 TRAN TABLE의 모든 거래를 날짜순으로 합산하여 합계가 CUR_BAL과 같을 때까지 합산합니다.값이 도달 할 때까지의 합계 - Teradata

편집이 MEM_NBR, ADJ_DT와의 모든 레코드를 캡처하기 위해 실행 합계에 포함 할 필요가 ADJ_AMT이 들어 세 번째 ADJ 테이블을 추가합니다.

나는 MEM.LST_UPD_DTMEM.MEM_NBR, MEM.CUR_BAL, TRAN.TRAN_DATE 또는 ADJ.ADJ_DT (CUR_BAL 동일하게 누적 합계 결과 거래와 관련된 날짜)를 포함하는 결과를 싶습니다. 나는 거래 또는 조정의 결과로 균형이 부정적인지, 그것이 부정적으로 된지를 알 필요가 없습니다.

감사합니다.

답변

1
select 
    mem_nbr, 
    cur_bal, 
    tran_date, 
    tran_type 
from (
    select 
     a.mem_nbr, 
     a.cur_bal, 
     b.tran_date, 
     b.tran_type, 
     a.lst_upd_dt, 
     sum(b.tran_amt) over (partition by b.mem_nbr order by b.tran_date rows between unbounded preceding and current row) as cumulative_bal 
    from mem a 
    inner join (
     select 
      mem_nbr, 
      tran_date, 
      tran_amt, 
      'Tran' as tran_type 
     from tran 
     union all 
     select 
      mem_nbr, 
      adj_date, 
      adj_amt, 
      'Adj' as tran_type 
     from adj 
    ) b 
    on a.mem_nbr = b.mem_nbr 
    where a.cur_bal < 0 
    qualify cumulative_bal < 0 
) z 
qualify rank() over (partition by mem_nbr order by tran_date) = 1 

서브 쿼리 누적 밸런스가 부정 모든 인스턴스를 픽업 후 외부 쿼리는 그 초기 인스턴스를 픽업. 최신 버전을 원하면 qualify 행의 tran_date 뒤에 desc을 추가하십시오.

+0

답변 해 주셔서 감사합니다. 나는 두 가지를 찾고 있습니다. 현재의 잔액 (부정적 일 경우)과 마지막 거래 날짜 및 부적절한 거래 날짜가 필요하기 때문에 많은 거래가 있었을 수 있습니다. 그래서 처음에 부정적으로 된 이유를 조사 할 수 있습니다. 나는 당신의 대답을 조금만 시험해보고 다시 게시 할 것이다 !! 다시 한 번 감사드립니다! –

+0

을 수정하여 고려해야 할 조정 항목이있는 추가 표를 추가하십시오. 시퀀스에서 해당 날짜를 포함하면서 세 번째 테이블에 조인하는 방법을 모릅니다. 코드가 두 테이블에서 완벽하게 작동했지만 ADJ 테이블에 대해 생각하지 않았기 때문에 필요한 모든 계정을 반환하지 않았습니다. 두 번째 가입을 도와 드릴까요? 다시 한 번 감사드립니다! –

+0

조정 테이블이 어떻게 작동하는지 잘 모르겠습니다. 일부 샘플 데이터를 포함하고 결과로 기대하는 것을 실행하는 것이 가장 좋습니다. – lins314159

관련 문제