Sql Ms Access查询前一天';日期

Sql Ms Access查询前一天';日期,sql,ms-access,ms-access-2013,ms-access-2016,Sql,Ms Access,Ms Access 2013,Ms Access 2016,如何在Ms Access中创建查询,以将前一天的金额作为期初余额。因此,在运行查询时,我在WorkDay参数框中输入3/10/18,并显示3/10/18和2/10/18的记录。该表的设置如下所示: 工作日…交易ID…金额 2018年2月10日……开业……1000 2018年2月10日……贷项……500 2018年2月10日……借方……300 2018年3月10日…….信用证…….700 2018年10月3日……借方……200 因此,如果我运行2018年3月10日的查询,它应该返回 工作日…交易I

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

工作日…交易ID…金额

2018年2月10日……开业……1000

2018年2月10日……贷项……500

2018年2月10日……借方……300

2018年3月10日…….信用证…….700

2018年10月3日……借方……200

因此,如果我运行2018年3月10日的查询,它应该返回

工作日…交易ID…金额

2018年2月10日……[Expr]……800

2018年3月10日…….信用证…….700


18年10月3日……如果您正在使用GUI,请将
日期添加(“d”、-1、[MyDateParameter])
添加到
[MyDateParameter]
字段中
[MyDateParameter]
下的OR行

对于SQL
WHERE
语句,您将使用

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

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

首先,请注意请求:

  • 预期结果对当天和前一天提出了不同的要求,因此必须有两个不同的查询。如果希望将它们放在一个结果集中,则需要使用并集

    • (您可以编写一个SQL联合查询,但由于联合查询根本不能与可视化设计器一起工作,因此您可以编写和测试该查询,而不必使用“查询设计”视图。因此,我的首选方法是创建两个已保存的查询,而不是嵌入的子查询,然后创建一个合并已保存查询结果的联合。)查询。)
  • 无论是问题,还是对评论的回答,都没有说明如何处理任何例外情况,如缺少日期、周末等。以下查询毫无例外地使用“前一天”

  • 另一个困难是信用分录也有正数,所以你必须特别处理它们。如果信用分录是用负值保存的,那么求和将是简单而直接的

  • 查询电流:

    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()函数,但从日期中添加/减去整数默认为天的变化

    请发布您正在使用的代码或表达式。如果可以,整个SQL语句将是最好的,以便其他人可以看到您表达式的上下文。任何人都无法在不确切知道当前编码的情况下猜测问题所在或提出解决方案。好的,很抱歉。请查看我编辑的帖子。但这是错误的只有数据,这可能有用,但肯定不够。实际的查询…SQL语句…决定返回或不返回什么数据。WorkDay-日期/时间TransactionID-文本量-Double您的数据只显示两个日期,但对于多个日期,您希望是什么情况?如果缺少一个日期,例如超过一个日期,该怎么办周末?您是否希望汇总所有以前的日期,或者仅仅是一个“前一天”?此外,日期是否列为mm/dd/yyyy或dd/mm/yyyy?我了解这一部分,但如何获得查询结果以包括2/10/18工作日(期初+借记卡)的总和以及3/10/18工作日的事务。您希望聚合前一天的记录,但仍显示原始的当天记录,或者也聚合这些记录?第二个选项更简单。对于第一个选项,您将需要子查询和/或SQL,您无法使用单个GUI驱动的查询。很好。您做到了。需要稍微改进一下但那正是我想要的。唯一的问题是前一天的数字加起来不正确,即(期初+借记卡)在QueryPrevious上,TransactionID的参数框正在弹出。哦,我确实注意到了可能发生的潜在问题,如缺少日期等。但目前还没有明确的步骤。请注意显式字段别名和表字段
    TransactionID
    之间可能存在的冲突。以避免循环引用和无效的参数提示ts,请确保一切正常,以避免冲突。如果它要求TransactionID作为参数,则需要限定对表字段的引用,如
    TableAlias.TransactionID
    ,或更正拼写,或将显式值的别名更改为其他值,如
    “[Expr]”作为TranID
    。这可能会解决求和问题,因为贷方的-1值取决于TransactionID字段。