计算一列中行之间的Datediff(超过2条记录)

use*_*012 5 sql database ms-access access-vba

我有一个表有一列日期,我想找到它们之间的区别.我已经能够找到一个答案,让我得到两个日期之间的差异,但找不到任何可以让我区分每个客户的几个记录的东西.

我的数据如下:

Customer     Pstng_Date
Henry        05\01\2014
Henry        10\01\2014
Henry        15\01/2014
Williams     07\01/2014
Williams     15\01\2014
Run Code Online (Sandbox Code Playgroud)

我一直在使用下面的代码来计算威廉姆斯的例子,但不能让它工作,以便计算所有亨利的例子.我想看到的是:

Customer     Pstng_Date     Days_Between
Henry        05\01\2014     0
Henry        10\01\2014     5
Henry        15\01/2014     5
Williams     07\01/2014     0
Williams     15\01\2014     8
Run Code Online (Sandbox Code Playgroud)

我一直在使用以下代码来计算两个记录之间的差异.

SELECT AllDays.ID, AllDays.Customer, AllDays.Pstng_Date, AllDays.NextDate, DateDiff("d",[Pstng_Date],[NextDate]) AS Days
FROM (SELECT  ID, Customer, Pstng_Date,
                    (   SELECT  Min(Pstng_Date)
                        FROM    SAPData T2
                        WHERE  T2.Pstng_Date > T1.Pstng_Date
                    ) AS NextDate
            FROM    SAPData T1
        )  AS AllDays;
Run Code Online (Sandbox Code Playgroud)

Han*_*sUp 3

更改相关子查询,使其返回先前Pstng_Date值中的最大值T1.Customer

在 Access 2007 中使用示例数据进行测试时,此查询返回了您想要的结果。

SELECT
    AllDays.Customer,
    AllDays.Pstng_Date,
    Nz(DateDiff("d",[PreviousDate],[Pstng_Date]), 0) AS Days_Between
FROM
    (
        SELECT
            Customer,
            Pstng_Date,
            (
                SELECT Max(Pstng_Date)
                FROM SAPData AS T2
                WHERE
                        T2.Customer = T1.Customer
                    AND T2.Pstng_Date < T1.Pstng_Date
            ) AS PreviousDate
        FROM SAPData AS T1
    ) AS AllDays;
Run Code Online (Sandbox Code Playgroud)

如果您将从 Access 会话外部运行查询,则该Nz()功能将不可用。在这种情况下,您可以改用表达式IIf()

IIf([PreviousDate] Is Null, 0, DateDiff("d",[PreviousDate],[Pstng_Date]))
Run Code Online (Sandbox Code Playgroud)