如何从 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
注释:
- SKU 111: 从今天开始 0 天无货。 123
- SKU 123:2021-11-21(最后无货日期)到今天无货2天
- SKU 146:不显示在这个结果中,因为今天它从今天开始又有货了。
希望能解释清楚
感谢您的帮助! :)
您可以使用下一个查询解决问题:
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;
如果您有 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
我有一个 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 |
注释:
- SKU 111: 从今天开始 0 天无货。 123
- SKU 123:2021-11-21(最后无货日期)到今天无货2天
- SKU 146:不显示在这个结果中,因为今天它从今天开始又有货了。
希望能解释清楚
感谢您的帮助! :)
您可以使用下一个查询解决问题:
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;
如果您有 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