如何从 table 查询一个 SKU 没有库存的天数

How to make a query from table that counts how many days is a SKU without stock

我有一个 MySQL 数据库,其中有一个名为 stock_log 的 table,其中包含以下数据:

sku date quantity stock
111 2021-11-18 0
123 2021-11-18 0
146 2021-11-18 0
111 2021-11-19 5
123 2021-11-19 4
146 2021-11-19 0
111 2021-11-20 3
123 2021-11-20 4
146 2021-11-20 0
111 2021-11-21 3
123 2021-11-21 0
146 2021-11-21 0
111 2021-11-22 2
123 2021-11-22 0
146 2021-11-22 0
111 2021-11-23 0
123 2021-11-23 0
146 2021-11-23 2

所以,我需要做一个查询,计算一个 SKU 到今天 (2021-11-23) 有多少天没有库存,只有今天没有库存,按 SKU 分组。它还必须从没有库存的最后一天开始计算没有库存的天数(因为 SKU 可能连续 3 天有库存,然后再次为 0,然后再次有库存,然后再次为 0)。

所以查询应该显示:

sku days without stock
111 0
123 2

注释:

希望能解释清楚

感谢您的帮助! :)

您可以使用下一个查询解决问题:

select
    sku, 
    DATEDIFF( -- date diff in days between
        CURRENT_DATE,  -- current date
        MAX(if(quantity > 0, `date`, '')) -- last date with stock
    ) days_without_stock
from sku
group by sku
having days_without_stock > 0;

MySQL group by fiddle

如果您有 sql 问题,我认为为任何潜在的回答者构建 sql fiddle 模式是一件真正的事情。

无论如何,像这样:

select 
a.sku,
datediff(current_date, date_last_stock) - 1 as days_wo_stock
from stock a
left join (
  select 
  sku, 
  max(date) date_last_stock
  
  from stock 
  
  where qty > 0
  
  group by 
  sku
 ) b on a.sku = b.sku

where a.date = current_date
and a.qty = 0

看到这个 fiddle。适用于 MySQL 5.6