在Teradata中,我需要一个查询来首先识别MEM TABLE
中当前有负余额的所有成员,让我们称之为CUR_BAL
。然后,对于所有这些成员,按日期顺序对TRAN TABLE
中的所有交易进行求和,直到这些交易的总和等于CUR_BAL
。
编辑以添加第三个ADJ
表,其中包含MEM_NBR
,ADJ_DT
和ADJ_AMT
,需要包含在运行总计中才能捕获所有记录。
我希望结果包括MEM.MEM_NBR
,MEM.CUR_BAL
,TRAN.TRAN_DATE
或ADJ.ADJ_DT
(与导致竞选总数相等的交易相关的日期{{} 1}}),CUR_BAL
。我不需要知道交易或调整后的余额是否为负数,只是它变为负数的日期。
谢谢!
答案 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
。