达到价值之前的总和 - Teradata

时间:2012-06-20 23:38:46

标签: sql teradata

在Teradata中,我需要一个查询来首先识别MEM TABLE中当前有负余额的所有成员,让我们称之为CUR_BAL。然后,对于所有这些成员,按日期顺序对TRAN TABLE中的所有交易进行求和,直到这些交易的总和等于CUR_BAL

编辑以添加第三个ADJ表,其中包含MEM_NBRADJ_DTADJ_AMT,需要包含在运行总计中才能捕获所有记录。

我希望结果包括MEM.MEM_NBRMEM.CUR_BALTRAN.TRAN_DATEADJ.ADJ_DT(与导致竞选总数相等的交易相关的日期{{} 1}}),CUR_BAL。我不需要知道交易或调整后的余额是否为负数,只是它变为负数的日期。

谢谢!

1 个答案:

答案 0 :(得分: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