一段时间内的最大和平均债务天数

Max and Avg debt days over a period of time

我有待付款的发票,每张发票都有两个日期,一个是发票需要付款的日期,另一个是发票付款的日期。我想知道一段时间内最大债务和平均债务

这是table

Id          Invoice Amount      InvoiceDate InvoicePayment
----------- ------- ----------- ----------- -------------
1           Bill 1  314         2019-01-20  2019-03-01
2           Bill 2  205         2019-01-14  2019-02-18
3           Bill 3  90          2019-02-04  2019-02-06
4           Bill 4  456         2019-01-03  2019-04-27

我想知道2月份的最大债务额和平均债务额

您可以使用 cross apply 逆向旋转,并使用 window 总和来计算每个给定时间点的“运行”债务。剩下的只是过滤和聚合:

select avg(debt) avg_debt, max(debt) max_debt
from (
    select x.dt, sum(x.amount) over(order by x.dt) debt
    from mytable t
    cross apply (values (invoicedate, amount), (invoicepayment, -amount)) as x(dt, amount)
) t
where dt >= '20200201' and dt < '20200301'