Ms Access查询前一天的日期

Ms Access query previous day's date

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

工作日....交易ID....金额

2/10/18......开盘.......1000

2/10/18......积分.......500

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

3/10/18.......积分.......700

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

所以如果我 运行 查询 3/10/18 它应该 return

工作日....交易ID....金额

2/10/18......[Expr].......800

3/10/18.......积分.......700

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

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

对于 SQL WHERE 语句,您将使用

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

显然用您的实际日期参数替换 [MyDateParameter]

首先是关于请求的一些说明:

  1. 想要的结果对当天和前一天有不同的要求,所以必须有两个不同的查询。如果您希望它们在一个结果集中,则需要使用 UNION。

    • (您可以编写单个 SQL UNION 查询,但由于 UNION 查询根本不适用于可视化设计器,因此您只能编写和测试查询,而没有查询设计视图的任何优势. 因此,我的偏好是创建两个保存的查询而不是嵌入式子查询,然后创建一个结合保存的查询结果的 UNION。)
  2. 问题和评论的答案都没有说明如何处理任何例外情况,例如缺少日期、周末等。以下查询毫无例外地按字面意思使用 "day before"。

  3. 另一个难点是Credit分录也有正数,需要特殊处理。如果Credits存负值,求和就简单直接了

查询电流:

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

查询上一个:

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() 函数,但是 add/subtracting 日期中的整数默认为天数的变化。