我有一个表“日志”,我在其中跟踪库存变化。我用贷方表示库存增加,借方表示减少(我认为从会计原则来看,这是倒退的,但这是客户想要的)。
我需要计算每个产品的借方和贷方余额(由 upc 字段表示),就像一个运行总计 - 换句话说,我想显示按时间戳(或默认顺序)排序的日志,并且每次任何产品都有增量或减量,显示由于该特定增量或减量而导致的当时的库存余额。
我已经能够使用此查询来演示这一点,但只能通过在 where 子句中添加其 UPC 代码作为条件来挑选出特定产品:
SELECT
l.id,
l.upc,
l.credit,
l.debit,
@bal := @bal + credit - debit AS balance,
l.timestamp
FROM log l, (SELECT @bal := 0) b
where upc = '677797003424';
问题是当我取出 where 子句时,计算并没有考虑到它只应该分别对每组 UPC 代码进行操作。
经过一番搜索,我遇到了这个问题,答案看起来与我可能需要的类似,但是,它与 MySQL 无关,而是与 SQL Server 相关。另外,我不确定结果是否是我上面提到的日志/跟踪格式。具体来说,我要避免的是在每一行上显示最终余额。如果库存有 999 件产品,然后递减 4 次后,库存有 995,则表示记录递减量的每条记录不应显示计算出的 995 余额,而是第一个递减量日志应显示结果余额998,第二个应该显示 997,等等。
- - 编辑 - -
有没有办法在不使用变量的情况下做到这一点?另外,是否可以将日志按时间戳排序,以便产品全部混合,而不是一起订购?