1

我在理解 MS Access Query 中的概念时遇到了一些困难。我不是很擅长查询。我只是使用查询生成器来完成我的工作,而这就是我此刻卡住的地方。

情况如下:

我有一个包含以下字段的交易表

[群组]、[日期时间]、[收款金额]、[其他字段...]

例子:

[ABC] [11/11/2013 20:15] [120.00]

[DEF] [2013 年 12 月 11 日 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 的天数总额。

因此,应根据 2013 年 11 月 11 日 06:30 至 2013 年 12 月 11 日 06:29 之间的交易计算 2013 年 11 月 11 日的总数。

我似乎无法编写一个可以获取报告日期并根据时间范围给出每个组的总天数的查询。此外,每个组可以有不同的时间界限。我尝试使用查找表,但似乎无法继续前进。

我会感谢任何帮助。如果需要,我很乐意解释更多。

谢谢,

4

2 回答 2

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]));
于 2013-11-13T10:26:04.333 回答
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

和[组]

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;
于 2013-11-13T10:53:53.847 回答