我有一个这样的表-它是特定客户的信用卡交易表: (如您所知,当使用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
我希望您已经了解了算法。 我真的很难为此写一个查询。 帮帮我吗?
答案 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 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;