情景:销售一笔插入一条记录,状态为有效,退机则把销售记录置为失效,在退机记录表新增一笔退机的记录,统计销售量和库存的时候一开始是这样计算的:
销售量:select count(*) from 销售记录表 where 状态=有效 退机数:select count(*) from 退机记录表 where 退机=true 库存=开始库存-销售+退机
有这样一种情况
用户换机,新增一条退机记录,旧的销售记录置为失效,再添加一条新的销售记录,此时再用上面的sql则有问题。如一开始有2台手机,卖出去一台,销售表新增一条记录,用户又退了,给用户另外一台,则销售表有2条记录,含一条失效的记录,退机记录表也有一条记录,上述销售换机操作发生在同一天内。
上面的sql统计出来,销售数量为1 ,退机数为1,库存为开始2-销售1+退机1=2,实际库存为1。
实际得这么算,库存为开始2-销售1+退机1-销售退机换机再销售(同一天换机数)1=退机1。
当初想的太简单了。
全文完。