首页 > 解决方案 > 查询以获取 MySQL 上每个 item_id 的运行库存数

问题描述

我正在使用已经支持窗口功能的 MySQL 8.0。给定当前数据集,如下图所示, 数据集有 2 种项目

我需要获得每个股票走势的股票头寸。使用如下查询

> SELECT h.item, h.item_date, h.item_qty, h.item_flow,
> @stock := @stock + (h.item_qty*h.item_flow) AS running_stock FROM stock h CROSS JOIN (SELECT @stock := 0) r  WHERE h.item = 1 ORDER
> BY h.item

我可以获得特定项目的库存

结果与每个日期的运行库存

我的问题是: 如何修改我的查询,以便在单个查询中获得所有类型项目的结果?我不知道如何在每个组上重置 @stock 变量。

添加列不是解决方案,因为我需要在查询中解决这个问题。添加一列需要我计算每次在中间日期添加新库存变动(会有回溯交易)

预期结果集

标签: mysql

解决方案


用作SUM()解析函数:

SELECT
    item,
    item_date,
    item_qty,
    item_flow,
    SUM(item_qty*item_flow) OVER (PARTITION BY item ORDER BY item_date) AS running_stock
FROM stock
ORDER BY
    item,
    item_date;

推荐阅读