转换为SQL并不难,但是性能可能很差。这将为您提供产品重新入库时的时间戳记:
SELECt inv.*, ( SELECT MIN(`inv2`.`in_stock_at`) FROM inventories AS inv2 WHERe inv2.`product_id` = inv.`product_id` -- same product AND inv2.`pusher_id` = `inv`.`pusher_id` -- same pusher AND `inv2`.`created_at` > inv.`created_at` -- later timestamp AND `inv2`.`item_count` > 0 -- in stock ) AS inStockAgain_atfrom `inventories` AS invWHERe inv.`item_count` <= 0 -- out of stock -- AND inv.`product_id`=9
编辑:
删除零库存的连续行更加复杂:
SELECt inv.*, dt.inStockAgain_atFROM inventories AS invJOIN ( SELECt product_id, pusher_id, MIN(created_at) AS min_created_at, inStockAgain_at FROM ( SELECt product_id, pusher_id, created_at, ( SELECT MIN(inv2.created_at) FROM inventories AS inv2 WHERe inv2.product_id = inv.product_id -- same productAND inv2.pusher_id = inv.pusher_id -- same pusherAND inv2.created_at > inv.created_at -- later timestampAND inv2.item_count > 0 -- in stock ) AS inStockAgain_at FROM inventories AS inv WHERe inv.item_count <= 0 ) AS dt GROUP BY product_id, pusher_id, inStockAgain_at ) AS dtON inv.product_id = dt.product_idAND inv.pusher_id = dt.pusher_id AND inv.created_at = dt.min_created_at
见sqlfiddle



