Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从一个值中减去多个值_Mysql_Sql - Fatal编程技术网

Mysql 从一个值中减去多个值

Mysql 从一个值中减去多个值,mysql,sql,Mysql,Sql,我必须维护库存账龄,其中我必须向库存部门显示一种产品的数量从多少天起待定 它将在先到先得的基础上减去 Department |Product | Date | Quantity |Indicator ------------+---------+--------------------+-----------+--------- D001 |P001 | 1Jul2017 | 1000 |ADD D001

我必须维护库存账龄,其中我必须向库存部门显示一种产品的数量从多少天起待定

它将在先到先得的基础上减去

Department  |Product  | Date               | Quantity  |Indicator
------------+---------+--------------------+-----------+---------
D001        |P001     | 1Jul2017           | 1000      |ADD
D001        |P001     | 10Jul2017          | 2000      |ADD
D001        |P001     | 15Jul2017          | 3000      |ADD
D001        |P001     | 18Jul2017          | 5500      |SUBTRACT
D001        |P002     | 12Jul2017          | 3000      |ADD
D001        |P002     | 14Jul2017          | 2000      |ADD
D001        |P002     | 15Jul2017          | 4000      |SUBTRACT
最终的输出应该是这样的。如果今天的日期是2017年7月31日

Department  |Product  | Date               | Quantity  |AgeinginDays
------------+---------+--------------------+-----------+---------
D001        |P001     | 15Jul2017          | 500       |16
D001        |P002     | 14Jul2017          | 1000      |17

可以使用聚合函数和datediff

select Department
  , Product
  , max(Date)
  , sum ( case when indicator =  'ADD' then quantity else -quantity end)
  , datediff(curdate(), max(Date))
from my_table
group by  Department, Product
或者,如果您需要添加日期,请按照chillysapiens的建议

select Department
  , Product
  , t.max_add_date
  , sum ( case when indicator =  'ADD' then quantity else -quantity end)
  , datediff(curdate(), max(t.max_add_date))
from my_table
inner join  (
    select Department
      , Product
      , max(Date) max_add_date
    from my_table 
    where indicator = 'ADD'
    group by  Department, Product
 ) t 
group by  Department, Product

可以使用聚合函数和datediff

select Department
  , Product
  , max(Date)
  , sum ( case when indicator =  'ADD' then quantity else -quantity end)
  , datediff(curdate(), max(Date))
from my_table
group by  Department, Product
或者,如果您需要添加日期,请按照chillysapiens的建议

select Department
  , Product
  , t.max_add_date
  , sum ( case when indicator =  'ADD' then quantity else -quantity end)
  , datediff(curdate(), max(t.max_add_date))
from my_table
inner join  (
    select Department
      , Product
      , max(Date) max_add_date
    from my_table 
    where indicator = 'ADD'
    group by  Department, Product
 ) t 
group by  Department, Product
甲骨文

SELECT 
 department,
 product,
 max(CASE WHEN "Indicator" LIKE 'Add%' THEN "Date" END) AS "Date",
 sum(CASE WHEN stock."Indicator" LIKE 'Add%' THEN (QUANTITY) ELSE (QUANTITY*-1) END) AS "QUANTITY",
 FLOOR((SYSDATE - max(CASE WHEN "Indicator" LIKE 'Add%' THEN "Date" END))) AS AgeinginDays
FROM STOCK
GROUP BY department,product
甲骨文

SELECT 
 department,
 product,
 max(CASE WHEN "Indicator" LIKE 'Add%' THEN "Date" END) AS "Date",
 sum(CASE WHEN stock."Indicator" LIKE 'Add%' THEN (QUANTITY) ELSE (QUANTITY*-1) END) AS "QUANTITY",
 FLOOR((SYSDATE - max(CASE WHEN "Indicator" LIKE 'Add%' THEN "Date" END))) AS AgeinginDays
FROM STOCK
GROUP BY department,product

日期是如何存储的?时间戳?约会?为什么对于产品P001,您希望日期为2017年7月15日,而不是第一个或最后一个日期?显示表格模式存储的日期是多少?时间戳?约会?为什么对于产品P001,您希望日期为2017年7月15日,而不是第一个或最后一个日期?显示您的表模式我认为您可能希望将max(Date)更改为max(当indicator='ADD'然后Date else null end时),因为所需的日期似乎是最后一次将产品添加到表中Inventory@chillysapien可以是。。根据您的建议更新答案。。希望是有用的我想你会想把max(Date)改为max(当indicator='ADD'然后Date else null end时),因为看起来所需的日期是最后一次将产品添加到Inventory@chillysapien可以是。。根据您的建议更新答案。。希望可能有用实际上我只想显示减法后挂起的记录。结果如下表所示部门|产品|日期|数量|老化天数-----------+------------------+--------+--------+---------D001 | P001 | 2017年7月15日| 500 | 16 D001 | P002|2017年7月14日| 1000 | 17我已经对它进行了测试,并带来了您想要的表格。实际上我只想显示减法后挂起的记录。结果应该如下表所示:部门|产品|日期|数量|年龄天数-----------+--------+--------+--------+--------+--------+----D001|P001 | 2017年7月15日| 500 | 16 D001 | P002 | 2017年7月14日| 1000 | 17我已对其进行了测试,并为您带来了您想要的桌子。