比较两个日期并计算日期差

时间:2020-06-05 08:48:05

标签: sql sql-server

我必须对表格进行比较:

时间表表:

enter image description here

正式收据表:

enter image description here

我只是想通过比较官方收据和时间表表之间的日期来了解客户是否按照时间表进行付款。如果没有,那么通过从计划日期算起的天数,每天将向他罚款10美元。

示例:第一付款时间表为2019-11-02。但OR显示他在2019-12-10支付了费用。这比他的第一笔付款时间表晚了38天。然后将处以罚款。任何想法?谢谢。

我想要这样的东西:

Loanid     | PaymentSched | Date OR    | Past Due | Penalty
H1807.0008 | 2019-11-02   | 2019-12-10 | 38 Days  | 380

2 个答案:

答案 0 :(得分:1)

假设没有遗漏的付款,也没有部分付款,那么一种选择是用row_number()枚举计划的付款和收据,然后将它们合并在一起。剩下的只是过滤延迟付款并计算延迟天数和罚款:

select 
    s.loan_id,
    s.date_payment,
    r.date_or,
    datediff(day, s.date_payment, r.date_or) as past_due_days,
    10 * datediff(day, s.date_payment, r.date_or) as penalty
from (
    select s.*, row_number() over(partition by loan_id order by date_payment) rn
    from schedule s
    where total_payment > 0
) s
inner join (
    select r.*, row_number() over(partition by loan_id order by date_or) rn
    from official_receipt r
) r on s.loan_id = r.loan_id and s.rn = r.rn and s.total_payment = r.amount
where r.date_or > s.date_payment

答案 1 :(得分:0)

datediff将帮助您

select datediff(day,'2019-10-02','2019-12-10')

select [Loanid],[PaymentSched],[Date OR],datediff(day,[PaymentSched],[Date OR]) as [Past Due],datediff(day,[PaymentSched],[Date OR])*10 as Penalty
from Schedule s
join [Official receipt] o on o.[Loanid]=s.[Loanid]