我正在尝试查询一些客户的连续逾期天数。我还具有识别客户的主键。
样品表
Date (d.m.y) Name
01.01.2014 Alex
02.01.2014 Alex
03.01.2014 Alex
01.01.2014 Bianca
02.01.2014 Bianca
08.07.2014 Alex
09.07.2014 Alex
10.07.2014 Alex
11.07.2014 Alex
我该如何区分名称,并且在制作时仅连续数天SELECT COUNT()
?
Desired Result
Name Overdue Day Count Date
Alex 3 01.01.2014 <== The date is the first overdue date
Bianca 2 01.01.2014
Alex 4 08.07.2014
这是一个间隙和孤岛问题(特别是孤岛)-不幸的是,我认为访问支持的唯一解决方案效率很低:
SELECT Name,
COUNT(*) AS Days,
MIN(Date) AS FirstDate,
MAX(Date) AS LastDate
FROM ( SELECT Name,
Date,
( SELECT MIN(B.Date)
FROM T AS B
WHERE B.Date >= A.Date
AND B.Name = A.Name
AND NOT EXISTS
( SELECT 1
FROM T AS C
WHERE C.Name = B.Name
AND C.Date = B.Date + 1
)
) AS grp
FROM T AS A
) AS D
GROUP BY Name, grp;
上面链接的文章中有完整的解释,但是用于创建列的子查询会grp
找到每个特定岛的末尾,然后可以使用此值对外部查询进行分组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句