如何实现按Item分组、Timestamp倒序的累计Loaded值计算自刷新报表?
实现多物料入库进度累计报表的SQL方案
首先明确需求核心:我们需要对每个物料(Item),按入库时间(Timestamp)从早到晚累加已入库数量(Loaded),然后按时间从晚到早排序展示,这样工人就能直观看到每一个时间节点的累计入库进度,以及最新的进度情况。
解决方案思路
利用SQL的窗口函数(Window Function)来实现分组累加,这是处理这类分组累计需求最简洁高效的方式:
- 用
PARTITION BY Item对每个物料单独分组计算,避免不同物料的进度混淆 - 用
ORDER BY Timestamp ASC指定按时间从早到晚的顺序累加,确保每一步的累计值是从最早入库记录开始逐步叠加的 - 最后整体按
Timestamp DESC排序,让最新的进度排在最前面,方便工人快速查看
示例SQL代码
假设你的入库记录表名为InboundRecords,执行以下SQL即可得到符合要求的报表结果:
SELECT Timestamp, Item, SUM(Loaded) OVER (PARTITION BY Item ORDER BY Timestamp ASC) AS Loaded, Expected FROM InboundRecords ORDER BY Timestamp DESC;
结果验证
我们用你提供的原始数据来验证逻辑:
- 对于物料A1,时间顺序是6→7→8→10,累加后Loaded分别为1、2、13、14
- 对于物料A2,时间顺序是2→9,累加后Loaded分别为6、7
按Timestamp降序排序后,最终结果如下(注:你提供的期望输出中A1的Timestamp7的Expected为4,推测是输入笔误,原始数据中A1的Expected均为14):
| Timestamp | Item | Loaded | Expected |
|---|---|---|---|
| 10 | A1 | 14 | 14 |
| 9 | A2 | 7 | 8 |
| 8 | A1 | 13 | 14 |
| 7 | A1 | 2 | 14 |
| 6 | A1 | 1 | 14 |
| 2 | A2 | 6 | 8 |
关于自刷新报表
如果要实现报表自动刷新,你可以将这个SQL封装成存储过程,或者在报表工具(如Power BI、Tableau等)中设置定时数据刷新频率,确保工人随时能看到最新的入库进度状态。
内容的提问来源于stack exchange,提问作者stackmonkey
相关产品推荐
相关产品推荐

