MySQL如何查询SKU从最近断货日到当日的累计断货天数
MySQL 断货天数统计SQL实现方案
实现逻辑
- 先筛选出统计当日(2021-11-23)库存为0的SKU,直接排除当日有货的SKU
- 对符合条件的SKU,查询其最后一次库存>0的记录日期
- 断货起始日为最后一次有货日期的次日,断货天数等于统计当日减去断货起始日的天数差
完整SQL代码
-- 定义统计截止日期,可根据需求修改 SET @current_date = '2021-11-23'; SELECT t1.sku, DATEDIFF(@current_date, IFNULL(t2.last_has_stock_date + INTERVAL 1 DAY, (SELECT MIN(日期) FROM stock_log))) AS 断货天数 FROM -- 筛选当日断货的SKU (SELECT sku FROM stock_log WHERE 日期 = @current_date AND 库存数量 = 0) t1 LEFT JOIN -- 查找每个SKU最后一次有库存的日期 (SELECT sku, MAX(日期) AS last_has_stock_date FROM stock_log WHERE 库存数量 > 0 GROUP BY sku) t2 ON t1.sku = t2.sku;
结果验证
运行上述SQL后,将得到和预期完全一致的结果:
| sku | 断货天数 |
|---|---|
| 111 | 0 |
| 123 | 2 |
结果说明
- SKU111最后一次有货日期为2021-11-22,断货起始日为2021-11-23,和统计当日相同,所以断货天数为0
- SKU123最后一次有货日期为2021-11-20,断货起始日为2021-11-21,到2021-11-23的天数差为2,所以断货天数为2
- SKU146当日库存为2,不在统计结果中
内容的提问来源于stack exchange,提问作者Nacho Sarmiento
相关产品推荐
相关产品推荐

