我的项目中有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
是否可以使用单个查询?
答案 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对其进行测试