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)
更改相关子查询,使其返回先前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)
| 归档时间: |
|
| 查看次数: |
9486 次 |
| 最近记录: |