SQL实现筛选:排除指定时间段内当前库存持续为0的记录
SQL实现排除持续零库存记录的筛选逻辑
需求说明
需要在SQL中实现筛选逻辑,排除指定时间段内当前库存(Current Stock)持续为0的记录。举个例子:如果某商品从2023年1月8日开始,所有日期的库存都为0,那么要把2023年1月8日及之后的相关记录全部剔除。
实现思路
- 先定位每个商品最后一次库存不为0的日期
- 筛选出所有日期早于或等于该日期的记录;如果某商品从未有过非零库存,可根据需求选择直接排除或保留
示例SQL代码
假设你的库存表名为inventory,包含字段:product_id(商品ID)、record_date(记录日期)、current_stock(当前库存),代码如下:
WITH last_non_zero_stock AS ( SELECT product_id, MAX(record_date) AS last_non_zero_date FROM inventory WHERE current_stock > 0 GROUP BY product_id ) SELECT i.* FROM inventory i LEFT JOIN last_non_zero_stock lnzs ON i.product_id = lnzs.product_id WHERE -- 有过非零库存的商品,保留最后一次非零库存日期及之前的记录 (lnzs.last_non_zero_date IS NOT NULL AND i.record_date <= lnzs.last_non_zero_date) -- 若需保留从未有过非零库存的商品记录,可取消下面的注释并调整条件 -- OR lnzs.last_non_zero_date IS NULL
代码解释
- CTE
last_non_zero_stock用于计算每个商品最后一次库存大于0的日期,这是判断是否进入持续零库存阶段的临界点 - 通过左关联将原表数据与CTE结果关联,筛选时只保留未超过临界点的记录
- 注释部分可根据业务需求调整,比如是否保留从未有过非零库存的商品数据
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

