MySQL查询从库存表中获取未售出的产品

时间:2018-11-08 14:16:29

标签: php mysql

我的项目中有2个表。一个是“产品”,另一个是“库存运动”。

“产品”表仅是已加载我们所有产品的主表。它只有2个字段  id-产品ID的自动递增字段  product_name-产品名称的VarChar 255唯一列

'Inventory Movement'表如下所示

id - Auto increment field

movement_type - Enum field (IN, OUT)

product - id from product table

quantity - No of items moving

movement_time - timestamp of action

movement表的样本数据...

id     movement_type   product   Quantity  movement_time

1      IN              1001      10        2018-02-01 12:35:33

2      IN              1002      15        2018-02-01 13:33:33

3      OUT             1001      5         2018-03-01 11:00:33

现在我必须提交一份报告,列出所有产品,其中包括最后一个“出”和最后一个“入”类型记录之间的时间差。

对于单个产品,我写了这样的查询...

1)获取最后的“ OUT”记录;

 select movement_time from inventory_movement where product = '1001' and movement_type='OUT' order by movement_time desc limit 1

2)获取最后的“ IN”记录;

 select movement_time from inventory_movement where product = '1001' and movement_type='IN' order by movement_time desc limit 1

3)查找两个时间戳之间的差异。

这是我如何知道带有ID的产品的未售出期限。

我知道这是无效的方法...有什么方法可以在单个查询中做到这一点?

无论如何,我是否会获得具有此时间戳差异的产品列表?

即以下是预期的输出...

Product     ----     Time Difference between last Out and last In


1001      ----        40 days

1002      ----        45 days

1004      ----        12 days

是否可以使用单个查询?

1 个答案:

答案 0 :(得分:1)

似乎应该在条件MIN和MAX之间执行DATEDIFF。

SELECT product,
DATEDIFF(MAX(case when movement_type='OUT' then movement_time end), MIN(case when movement_type='IN' then movement_time end)) AS InOutDayDiff
from inventory_movement 
GROUP BY product
ORDER BY product

您可以here对其进行测试