运行 基于有时需要追溯日期的日期的总数

Running Total based on dates when retroactive dates are sometimes necessary

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

目标:创建财务分类帐。

我可以通过使用

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

这样做的问题是,如果有多笔交易的日期相同,则匹配的日期都将显示相同的 运行 总数。 运行 总数仅针对日期的每次更改进行更新,而不是针对每笔交易进行更新。

解决此问题的一种方法是将 DSUM 标准基于 ID 而不是 TDate。但这对我不起作用,因为有时我需要追溯输入日期,这意味着我最终得到的旧交易的 ID 号高于其后的交易。由于我按日期排序,因此排除了 ID 字段作为选项。是否有创建逐行更新的 运行 总数的解决方法?

试试这个逻辑:

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

如果您将此作为查询来执行,则如下所示:

select t.*,
       (select sum(t2.amount)
        from transactions as t2
        where t2.tdA = t.tdA and -- not sure if this is necessary
              (t2.date < t.date or
               t2.date = t.date and t2.id <= t.id
              )
        ) as running_amount
from transactions as t;

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