Подведение итогов ежедневных кредитных расходов в SQL - PullRequest
0 голосов
/ 19 марта 2019

У меня есть такая таблица - это таблица транзакций по кредитным картам конкретного клиента: (Как вы знаете, при использовании кредитной карты для января фактический платеж, который взимается с банковского счета для этого клиента в феврале, в основном на 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 

И вывод My Desired должен быть таким: каждый день в поле рядом с ним я хочу видеть сумму ближайшего ожидаемого платежа и дату, когда заряд будет произведен.

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 голосов
/ 19 марта 2019

Если я правильно понимаю, вам нужны все незавершенные транзакции.

Для этого начнем со списка дат. Тогда cross apply или join:

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;
0 голосов
/ 19 марта 2019

Несколько неясно, чего вы хотите достичь. Хотите ли вы подвести итог ожидаемых платежей по клиенту, месяцу 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

...