0

Teradataでは、最初に、MEM TABLE現在マイナスのバランスをとっているのすべてのメンバーを識別するためのクエリが必要です。それをと呼びましょうCUR_BAL。次に、それらのすべてのメンバーについてのみ、TRAN TABLE日付順に、これらのトランザクションの合計がに等しくなるまで、すべてのトランザクションを合計しCUR_BALます。

ADJを含む3番目のテーブルを追加するための編集。これはMEM_NBR、すべてのレコードをキャプチャするために現在の合計に含める必要がありますADJ_DTADJ_AMT

MEM.MEM_NBR結果に、、、OR (現在の合計が等しくなる結果となったトランザクションに関連付けられた日付)MEM.CUR_BAL、を含めたいと思います。取引または調整の結果として残高がマイナスであるかどうかを知る必要はありません。マイナスになった日付だけです。TRAN.TRAN_DATEADJ.ADJ_DTCUR_BALMEM.LST_UPD_DT

ありがとうございました!

4

1 に答える 1

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

サブクエリは累積バランスが負であるすべてのインスタンスを取得し、次に外部クエリはその最も早いインスタンスを取得します。最新のものが必要な場合descは、最後の行のtran_dateの後に追加しqualifyます。

于 2012-06-21T03:32:21.900 に答える