案例:
我选择一个初始日期和一个结束日期,它应该为我带来该日期范围内所有产品的变动,但如果在初始日期之前(表中的记录)有变动,我想获得之前的总和(上一条数据)
如果第一个 Action 是导出 5,第二个 Action 是收入 2。
我将在第一行中包含 (prevData-5),第二行中将包含 (prevData-5 + 2),因此具有累积值。
prevData 将计算为上述总和,验证记录的产品 id,我进行了查询,但如果产品有 10 次移动,我将查询 10 次,我将如何识别总和另一个product_id?
SELECT
ik.id,
ik.quantity,
ik.date,
ik.product_id,
#balance = (SELECT SUM(quantity) FROM table_kardex WHERE product_id = ik.product_id AND id < ik.id)
from table_kardex ik
where ik.date between '2021-11-01' and '2021-11-15'
order by ik.product_id,ik.id asc
希望您给我理解,我会注意任何问题。
表_kardex
是明显小于具有相同product_id的记录的id的总和(数量),例如id 1和2将是上一个数据
result
id|quantity|date|product_id|balance
3 5 2021-11-01 1 20 (15+5)
5 -2 2021-11-02 1 18 (15+5-2)
4 10 2021-11-01 2 18 (8+10)
6 -4 2021-11-02 2 14 (18-4)
可以用普通查询来完成,或者使用 View 或游标来完成,也许你可以指导我,我已经更改为MySQL 8。
最佳答案
如果您使用 MySQL 8+,则可以在此处使用分析函数:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY date) rn,
SUM(quantity) OVER (PARTITION BY product_id ORDER BY date) saldo
FROM table_kardex
WHERE date BETWEEN '2021-11-01' AND '2021-11-15'
)
SELECT id, quantity, date, product_id, saldo
FROM cte
WHERE rn > 1
ORDER BY product_id, date;
关于mysql - 获取查询中先前记录的总和并添加或减去以下结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70691881/