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]
。
首先是关于请求的一些说明:
想要的结果对当天和前一天有不同的要求,所以必须有两个不同的查询。如果您希望它们在一个结果集中,则需要使用 UNION。
- (您可以编写单个 SQL UNION 查询,但由于 UNION 查询根本不适用于可视化设计器,因此您只能编写和测试查询,而没有查询设计视图的任何优势. 因此,我的偏好是创建两个保存的查询而不是嵌入式子查询,然后创建一个结合保存的查询结果的 UNION。)
问题和评论的答案都没有说明如何处理任何例外情况,例如缺少日期、周末等。以下查询毫无例外地按字面意思使用 "day before"。
另一个难点是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 日期中的整数默认为天数的变化。
如何在 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]
。
首先是关于请求的一些说明:
想要的结果对当天和前一天有不同的要求,所以必须有两个不同的查询。如果您希望它们在一个结果集中,则需要使用 UNION。
- (您可以编写单个 SQL UNION 查询,但由于 UNION 查询根本不适用于可视化设计器,因此您只能编写和测试查询,而没有查询设计视图的任何优势. 因此,我的偏好是创建两个保存的查询而不是嵌入式子查询,然后创建一个结合保存的查询结果的 UNION。)
问题和评论的答案都没有说明如何处理任何例外情况,例如缺少日期、周末等。以下查询毫无例外地按字面意思使用 "day before"。
另一个难点是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 日期中的整数默认为天数的变化。