仅计算 MS Access 中的连续日期

now*_*way 3 sql ms-access

我正在尝试查询以计算某些客户的连续逾期天数。我还有一个识别客户的主键。

样品表

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
Run Code Online (Sandbox Code Playgroud)

如何区分名称并在制作时只计算连续天数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
Run Code Online (Sandbox Code Playgroud)

Gar*_*thD 5

这是一个间隙和岛屿问题(特别是岛屿) - 不幸的是,我认为访问支持的唯一解决方案非常低效:

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;
Run Code Online (Sandbox Code Playgroud)

上面链接的文章中有完整的解释,但是用于创建列的子查询会grp找到每个特定岛的末端,然后可以使用此值对外部查询进行分组。