我在理解MS Access Query中的概念方面遇到了一些困难。我不太擅长查询。我只是使用查询构建器来完成我的工作,而这就是我现在所处的位置。
情况如下:
我有一个包含以下字段的交易表
[组],[日期时间],[收据金额],[其他字段...]
示例:
[ABC] [11/11/2013 20:15] [120.00]
[DEF] [12/11/2013 06:10] [200.00]
[ABC] [12/11/2013 06:20] [10.00]
[ABC] [12/11/2013 06:50] [400.00]
我的报告要求是根据dd / mm / yy 06:30到dd / mm / yy 06:29显示天数总额。
所以,11/11/2013总计应该根据11/11/2013 06:30至2013年11月12日06:29之间的交易计算。
我似乎无法编写一个可以记录报告日期的查询,并根据时间范围给出每个组的总日期。此外,每个组可以有不同的时间范围。我尝试使用查找表但似乎无法继续前进。
我会感谢任何帮助。如果需要的话,我会很乐意解释。
谢谢,
答案 0 :(得分:0)
我不太确定我是否正确获取msaccess的语法,但我建议您将[日期时间]改回6小时30分钟并将其用作您的工作日。
select
[Group]
, DateAdd("h",-6,DateAdd("n",-30,[Date Time])) AS [Business Day]
, sum([Receipt Amount]) AS [Receipt Amount Sum]
from yourTable
group by
[Group]
, DateAdd("h",-6,DateAdd("n",-30,[Date Time]));
答案 1 :(得分:0)
我的建议是在Access中创建一个名为[transactionsWithEffectiveDate]的已保存查询。
对于[交易]
Group Date Time Receipt Amount
----- ------------------- --------------
ABC 2013-11-11 20:15:00 120
DEF 2013-11-12 06:10:00 120
ABC 2013-11-12 06:20:00 10
ABC 2013-11-12 06:49:00 400
ABC 2013-11-12 06:50:00 200
ABC 2013-11-12 06:51:00 250
和[groups]
Group StartTime
----- ---------
ABC 06:50:00
DEF 05:30:00
查询
SELECT
Group,
[Date Time],
[Receipt Amount],
DateAdd("d", IIf(DateDiff("s", NewDayStart, [Date Time]) < 0, -1, 0), CDate(Int(t.[Date Time]))) AS EffectiveDate
FROM
(
SELECT
t.Group,
t.[Date Time],
t.[Receipt Amount],
CDate(Int(t.[Date Time]) + (g.StartTime - Int(g.StartTime))) AS NewDayStart
FROM
transactions t
INNER JOIN
groups g
ON g.Group = t.Group
)
返回
Group Date Time Receipt Amount EffectiveDate
----- ------------------- -------------- -------------
ABC 2013-11-11 20:15:00 120 2013-11-11
DEF 2013-11-12 06:10:00 120 2013-11-12
ABC 2013-11-12 06:20:00 10 2013-11-11
ABC 2013-11-12 06:49:00 400 2013-11-11
ABC 2013-11-12 06:50:00 200 2013-11-12
ABC 2013-11-12 06:51:00 250 2013-11-12
然后,您可以将该查询用作后续查询和报告的基础,例如
SELECT
EffectiveDate,
Sum([Receipt Amount]) AS [SumOfReceipt Amount]
FROM transactionsWithEffectiveDate
GROUP BY EffectiveDate;