我有一个包含这些列的表:
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天
答案 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
使用客户表和左连接到交易表允许客户从未进行交易的情况(因此他的日期数为零)。