MS Access:根据时间查询显示日总计

时间:2013-11-13 08:47:09

标签: sql ms-access ms-access-2010

我在理解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之间的交易计算。

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

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

谢谢,

2 个答案:

答案 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;