总结SQL中的每日信用费用

时间:2019-03-19 08:57:25

标签: sql sum sql-server-2014

我有一个这样的表-它是特定客户的信用卡交易表: (如您所知,当使用1月份的信用卡从该客户的银行帐户收取的实际付款时, 大部分时间为2019年2月15日,但将在2019年2月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

我希望您已经了解了算法。   我真的很难为此写一个查询。   帮帮我吗?

2 个答案:

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

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