计算客户上次余额为零时的天数

时间:2014-06-29 20:39:41

标签: sql sql-server

我有一个包含这些列的表:

TransID, CustomerID, Date, Credit, Debit, CurrentBalance

我想知道自客户有明确余额已经过了多少天,因为如果他们在过去14天内没有清算余额,我就不会给予信贷,

让我们谈谈一个特定的客户:

TransID, CustomerID, Date,        Credit, Debit, CurrentBalance
1        1           01/01/2014   0       50     50
2        1           01/05/2014   50      0      0
3        1           06/28/2014   0       100    100

现在在2014年6月29日,他们只有1天,因为他们的余额是明确的,但如果我从最后一行用CurrentBalance = 0计算,则超过175天

2 个答案:

答案 0 :(得分:1)

这是你在找什么?

select customerid,
       datediff(day, max(case when balance = 0 then date end), getdate())
from table t
group by customerid;

这将返回自最近的0余额记录以来的天数。

编辑:

现在我想我明白了。问题是0余额持续到2014年6月18日。使用SQL Server 2012或更高版本,我们可以使用lead()处理此问题:

select customerid,
       datediff(day, max(case when balance = 0 then nextdate end), getdate())
from (select t.*, lead(date) over (partition by customerid order by date) as nextdate
      from table t
     ) t
group by customerid;

Ť

答案 1 :(得分:1)

逻辑上,余额为零的最后一次是在余额为零时进行最后一次销售之前的瞬间,可以通过销售额等于销售后的余额来确定,即Debit = CurrentBalance - 这只有当销售前的余额为零时,才会发生混淆。

select
    c.id customerid,
    coalesce(datediff(day, max(t.date), getdate()), 0) days_clear
from customer c
left join transaction t on t.CustomerID = c.id
  and Debit = CurrentBalance
group by customerid

使用客户表和左连接到交易表允许客户从未进行交易的情况(因此他的日期数为零)。