Ms Access查询前一天的日期

时间:2018-10-03 18:22:49

标签: sql ms-access ms-access-2013 ms-access-2016

如何在Access女士中建立查询,以将前一天的金额作为期初余额。因此,在运行查询时,我在WorkDay参数框中输入3/10/18,并显示3/10/18和2/10/18的记录。该表的设置如下:

WorkDay .... TranactionID .... Amount

18/10/2 ...正在打开... 1000

18年2月10日......贷方...... 500欧元

2/10/18 .......借方......... 300

3/10/18 .......信用........ 700

3/10/18 .......借记......... 200

因此,如果我运行查询18/10/3,则应返回

WorkDay .... TranactionID .... Amount

18年2月10日... [专家] ......... 800

3/10/18 .......信用........ 700

3/10/18 .......借记......... 200

2 个答案:

答案 0 :(得分:1)

如果您使用的是GUI,请在DateAdd("d",-1,[MyDateParameter])字段中[MyDateParameter]下的OR行中添加Workday

对于SQL WHERE语句,您将使用

WorkDay=[MyDateParameter] OR Workday=DateAdd("d",-1,[MyDateParameter])

显然,[MyDateParameter]可以替换为您的日期参数。

答案 1 :(得分:0)

有关请求的一些注意事项:

  1. 期望的结果对当前日期和前一天提出了不同的要求,因此必须有两个不同的查询。如果要在一个结果集中使用它们,则需要使用UNION。

    • (您可以编写单个SQL UNION查询,但是由于UNION查询根本无法在可视设计器中使用,因此您不得不编写和测试查询,而没有查询设计视图的任何优势。因此,我倾向于创建两个保存的查询而不是嵌入式子查询,然后创建一个合并已保存查询结果的UNION。)
  2. 问题和评论答案都没有说明如何处理任何异常情况,例如缺少日期,周末等。以下查询在字面上毫无疑问地采用了“前一天”。

  3. 另一个困难是,贷项条目也有正数,因此您必须特别处理它们。如果将Credits保存为负值,则求和将简单而直接。

QueryCurrent:

PARAMETERS [Which WorkDay] DateTime;
SELECT S.WorkDay, S.TransactionID, Sum(S.[Amount]) As Amount
FROM [SomeUnspecifiedTable] As S
WHERE S.WorkDay = [Which WorkDay]
GROUP BY S.WorkDay, S.TransactionID

QueryPrevious:

PARAMETERS [Which WorkDay] DateTime;
SELECT S.WorkDay, "[Expr]" As TransactionID, 
  Sum(IIF(S.TransactionID = "Credit", -1, 1) * S.[Amount]) As Amount
FROM [SomeUnspecifiedTable] As S
WHERE S.WorkDay = ([Which WorkDay] - 1)
GROUP BY S.WorkDay

联盟查询:

SELECT * FROM QueryCurrent
UNION
SELECT * FROM QueryPrevious
ORDER BY [WorkDay]

有关解决方案的注意事项:

  • 您还可以使用DateAdd()函数,但是默认情况下,从日期中添加/减去整数的日期默认为天。