2012-06-20 44 views
0

在Teradata的,我需要一个查询,首先确定在当前具有负数余额MEM TABLE所有成员,让我们称之为CUR_BAL。然后,仅对所有这些成员,按日期排列从TRAN TABLE开始的所有交易,直到这些交易的总和等于CUR_BAL总和直到值达到 - Teradata的

编辑添加第三个ADJ表包含MEM_NBRADJ_DTADJ_AMT需要被包含在运行总计为了捕捉所有的记录。

我想结果包括,MEM.LST_UPD_DTMEM.MEM_NBRMEM.CUR_BALTRAN.TRAN_DATEADJ.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