我有一个不同国家和不同产品的库存变化表。该表如下所示:
| 日期|国家|产品|变化|
| --|--|--|--|
| 2023-10-01|西班牙|笔| 1 |
| 2023-10-01|德国|笔| 1 |
| 2023-10-01|德国|笔|-1个|
| 2023- 09 -01 2023- 09 -01|意大利|笔| 1 |
| 2023-09-01 2023-09-01|意大利|笔| 5 |
| 2023-09-01 2023-09-01|德国|铅笔| 2 |
| 2023-08-01 2023-08-01|西班牙|铅笔| 1 |
我试图写一个查询mysql 8+,可以总结仓库的库存按月分组,按产品和国家。
10月和9月的结果应该是这样的:
| 日期|国家|产品|股票|
| --|--|--|--|
| 十月23|意大利|铅笔| 5 |
| 十月23|意大利|笔| 1 |
| 十月23|西班牙|铅笔| 2 |
| 十月23|西班牙|笔| 3 |
| 十月23|德国|铅笔| 2 |
| 十月23|德国|笔| 3 |
| 九月23|意大利|铅笔| 2 |
| 九月23|意大利|笔| 1 |
| 九月23|西班牙|铅笔| 4 |
| 九月23|西班牙|笔| 1 |
| 九月23|德国|铅笔| 2 |
| 九月23|德国|笔| 3 |
问题是,在某些国家或某些产品中存在差距,不允许我使用分区执行简单的累积和。举例来说:
SELECT
Date,
Product,
Country,
SUM(SUM(variation)) OVER (PARTITION BY Product, Country ORDER BY Date)
FROM mytable
GROUP BY Date,Country,Product
我能想到的唯一解决方案是创建一个在日期上循环的过程,并在每个循环中计算总数,有没有其他更有效的解决方案来避免差距?也许使用递归CTE?
谢谢你,
1条答案
按热度按时间hgncfbus1#
这给了你什么给予?
我不明白间隙的问题。
正如Akina所指出的,如果
LEFT JOIN
的表中包含所有日期,则对于没有数据的日期,将给予NULL。IFNULL()
或COALESCE()
可以将NULL
转换为0
。如果上述内容不能给予您最终的结果,请向我们展示您的需求。