0

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

编辑以添加包含 的第三个ADJMEM_NBRADJ_DT并且ADJ_AMT需要将其包含在运行总计中以捕获所有记录。

我希望结果包括MEM.MEM_NBR, MEM.CUR_BAL, TRAN.TRAN_DATEOR ADJ.ADJ_DT(与导致运行总计等于的交易相关的日期CUR_BAL), MEM.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 回答