总结SQL中的每日信用费用

问题描述 投票:0回答:2

我有一张这样的表 - 它是特定客户的信用卡交易表:(正如您所知,当使用1月的信用卡时,2月份从该银行帐户收取的实际付款,主要是2019-02 -15但是有一项交易将在2019-02-10收取。

   Customer   orig_date   Payment charge_date
    100400    2019-01-01   500    2019-02-15
    100400    2019-01-01   100    2019-02-10
    100400    2019-01-01   400    2019-02-15
    100400    2019-01-04   300    2019-02-15
    100400    2019-01-09   100    2019-02-15
    100400    2019-01-10   50     2019-02-15
    100400    2019-02-09   1700   2019-03-15
    100400    2019-02-13   800    2019-03-15 
    100400    2019-02-16   500    2019-03-15 

而我想要的输出应该是这样的,每天我想在附近的一个字段中看到最接近的预期费用金额和收费发生的日期。

Customer  Tr_Date ChargeDate  Expected_Charge_Amt
100400  2019-01-01 2019-02-15    500 
100400  2019-01-01 2019-02-10    100     
100400  2019-01-02 2019-02-15    900     
100400  2019-01-02 2019-02-10    100  
100400  2019-01-03 2019-02-15    900  
100400  2019-01-03 2019-02-10    100    
100400  2019-01-04 2019-02-15    1200
100400  2019-01-04 2019-02-10    100   
100400  2019-01-05 2019-02-15    1200    
100400  2019-01-05 2019-02-10    100  
100400  2019-01-06 2019-02-15    1200 
100400  2019-01-06 2019-02-10    100       
100400  2019-01-07 2019-02-15    1200    
100400  2019-01-07 2019-02-10    100
100400  2019-01-08 2019-02-15    1200 
100400  2019-01-08 2019-02-10    100 
100400  2019-01-09 2019-02-15    1300   
100400  2019-01-09 2019-02-10    100 
100400  2019-01-10 2019-02-15    1350
100400  2019-01-10 2019-02-10    100

...... {所有日期之间没有变化}

100400  2019-01-31 2019-02-15    1350
100400  2019-01-31 2019-02-10    100

...... {所有日期之间没有变化}

100400  2019-02-09 2019-02-15    1350
100400  2019-02-09 2019-02-10    100
100400  2019-02-09 2019-03-15    1700

100400  2019-02-10 2019-02-15    1350
100400  2019-02-10 2019-03-15    1700

...... {所有日期之间没有变化}

100400  2019-02-14 2019-02-15    1350
100400  2019-02-14 2019-03-15    2500

.. {所有日期之间没有变化}

100400  2019-02-15 2019-03-15    3000
100400  2019-02-16 2019-03-15    3000

我希望你能得到algoritem的观点。我真的很难为此写一个查询。你能帮助我吗?

sql sum sql-server-2014
2个回答
0
投票

它有点不清楚你想要实现什么。您想要总结客户的预期费用,orig_date的月份和charge_date的日期吗?

如果是这样,这样的事情应该有效:

SELECT customer, cast(orig_date as DATE) as orig_month, charge_date, sum(payment) as Expected_Charge_amt from table_name group by customer, cast(orig_date as DATE), charge_date


0
投票

如果我理解正确,您需要所有待处理的交易。

为此,请从日期列表开始。然后是cross applyjoin

with dates as 
      select convert(date, '2019-01-01') as dte
      union all
      select dateadd(day, 1, dte)
      from dates
      where dte < '2019-02-28'
     )
select t.customer, d.dte as tr_date, t.charge_date,
       t.payment as expected_chart_amount
from dates d join
     transactions t
     on d.dte >= t.orig_date and
        d.dte <= t.charge_date
where t.customer = 100400
order by d.dte, t.charge_date;
© www.soinside.com 2019 - 2024. All rights reserved.