MS Access SQL按顺序更新

MS Access SQL按顺序更新,sql,ms-access,Sql,Ms Access,我有一个表,它提供了一个时间点快照,标题如下: |客户最后一次交易收费|数量| 每个月,我都会收到一份来自第三方的文件,其中包含添加新客户或更改现有客户信息的交易。当同一客户在一个月内有多个更新时,我遇到了问题 例如: 正在处理以下事务文件: 应生成以下快照表: 这可能不是最好的方法,但现在我有3个单独的查询来处理NEW、CHANGE和CANCEL。“新建”和“取消”没有问题 以下是如何设置我的更改查询: UPDATE snp INNER JOIN tr ON snp.[Cust#] = t

我有一个表,它提供了一个时间点快照,标题如下:

|客户最后一次交易收费|数量|

每个月,我都会收到一份来自第三方的文件,其中包含添加新客户或更改现有客户信息的交易。当同一客户在一个月内有多个更新时,我遇到了问题

例如:

正在处理以下事务文件:

应生成以下快照表:

这可能不是最好的方法,但现在我有3个单独的查询来处理NEW、CHANGE和CANCEL。“新建”和“取消”没有问题

以下是如何设置我的更改查询:

UPDATE snp
INNER JOIN tr
ON snp.[Cust#] = tr.[Cust#]

SET
    snp.[Last Trans] = tr.Transaction,
    snp.Charge = snp.Charge + tr.Charge,
    snp.Quantity = tr.Quantity

WHERE tr.Trans='CHANGE'
请注意,费用是递增的,数量不是递增的。更新费用按预期工作,但数量不符合要求。我不一定能得到最新的数量

如何确保如果某个客户发生任何更改,则最后一个数量字段取自最新的更改行(即该客户的最大ID)

内部查询将为您提供所有客户的最大ID。您可以根据更改条件筛选客户。外部查询将提供该行的所有详细信息。然后可以在查询中使用这些值

SELECT * FROM snp
WHERE ID IN (SELECT MAX(ID)
             FROM tr
             GROUP BY CUST#)