根据有时需要追溯日期的日期得出运行总计

时间:2019-02-19 02:17:22

标签: sql ms-access-2010

因此,我正在尝试在 Microsoft Access 2010 中创建一个查询,该查询基于日期进行总计。让我们通过假设查询基于名为tblT1的金融交易表进行简化,该表具有按日期排序的三个字段:

  • ID
  • TDa
  • 金额
目标:创建财务分类帐。

我可以通过使用

在查询中创建此运行总计
DSUM("Amount", "tblT1", "TDate<=#" & TDate &"#")

此问题是,如果有多个具有相同日期的交易,则匹配的日期将全部显示相同的运行总计。运行总计仅针对日期的每次更改进行更新,而不是针对每个事务进行更新。

解决此问题的一种方法是将DSUM标准基于ID而不是TDate。但这对我不起作用,因为有时我需要回溯输入日期,这意味着我最终遇到的旧交易具有比其后的交易更高的ID号。由于我按日期排序,因此不包括“ ID”字段。是否有任何变通办法来创建逐行更新的运行总计?

2 个答案:

答案 0 :(得分:1)

尝试以下逻辑:

@

如果您将其作为查询来执行,则看起来像这样:

DSUM("Amount",
     "tblT1",
     "(TDate < #" & TDate & "#) OR (TDate = #" & TDate &"# AND ID <= " & ID)"
    )

答案 1 :(得分:0)

我最终解决了。解决方案是根据现有表创建一个查询(称为“ Query1”),并根据交易日期和现有ID(主键)创建一个新的复合ID(名为NewID)。然后,我基于Query1创建了第二个查询(Query2),并将此NewID用作DSUM函数中的条件。但是,请注意以下几点:确保日期格式设置为YYYYMMDD,以便所有日期都具有相同的数字位数,并将按时间顺序排序。当您将现有ID添加到新的日期编号时,还要将其格式化为您认为有必要的位数(我选择了6)。最后,您需要将其全部封装在Val()函数中。否则,它将在查询中显示为文本,并且在DSUM函数中可能无法正常运行。 因此,这是查询2中的函数:DSUM(“ Amount”,“ tblT1”,“ NewID <=”&NewID)