【问题标题】:How to sort and subtract the values in SQL?如何对 SQL 中的值进行排序和减去?
【发布时间】:2022-08-19 18:09:43
【问题描述】:

该表包含以下列。

Region Part Date Stock Quantity
UP1 AAA 20/05/2022 20 5
UP1 AAA 03/05/2022 20 8
UP1 AAA 29/04/2022 20 5
UP1 AAA 13/04/2022 20 5
UP2 BBB 20/05/2022 30 15
UP2 BBB 03/05/2022 30 10
UP2 BBB 29/04/2022 30 20
UP2 AAA 13/04/2022 1 5

我试图通过排除区域和零件的多余数量来匹配数量和库存。

为了得到我在下面的 Stock-logic 中提到的。

逻辑是一个地区和部分,日期降序,库存应该从上述数量中扣除。

Quantity1 是我的要求。

Region Part Date Stock Quantity Stock-logic Quantity1
UP1 AAA 20/05/2022 20 5 20 5
UP1 AAA 03/05/2022 20 8 15 8
UP1 AAA 29/04/2022 20 5 7 5
UP1 AAA 13/04/2022 20 5 2 2
UP2 BBB 20/05/2022 30 15 30 15
UP2 BBB 03/05/2022 30 10 15 10
UP2 BBB 29/04/2022 30 20 5 5
UP2 AAA 13/04/2022 1 5 1 1

Stock-logic 和 Quantity 的最小值为 Quantity1。 如果 Quantity 大于 stock,则必须在 Quantity1 中显示库存。

提前致谢!

  • 为什么 Quantity <> Quantity1 在最后一行?

标签: mysql sql analytics


【解决方案1】:

您可以使用子查询为每个regionpartdate 上生成quantity 值的总和,然后您可以使用它来获取stock_logicquantity1 这样的值

SELECT 
    region,
    part,
    date,
    stock,
    quantity,
    stock - quantity_sum AS stock_logic,
    LEAST(stock - quantity_sum, quantity) AS quantity1
FROM (
    SELECT 
        *,
        COALESCE((SELECT SUM(quantity) FROM stock ss WHERE ss.region = s.region AND ss.part = s.part AND ss.date > s.date), 0) AS quantity_sum
    FROM stock s    
) s

输出

region part date stock quantity stock_logic quantity1
UP1 AAA 2022-05-20 20 5 20 5
UP1 AAA 2022-05-03 20 8 15 8
UP1 AAA 2022-04-29 20 5 7 5
UP1 AAA 2022-04-13 20 5 2 2
UP2 BBB 2022-05-20 30 15 30 15
UP2 BBB 2022-05-03 30 10 15 10
UP2 BBB 2022-04-29 30 20 5 5
UP2 AAA 2022-04-13 1 5 1 1

您可以查看工作演示 here

【讨论】:

    猜你喜欢
    • 2021-12-16
    • 2011-12-29
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 2021-10-24
    • 2022-07-07
    相关资源
    最近更新 更多