如何做一个查询表,计算有多少天为SKU没有股票

0

的问题

我有一个数据库有一个表叫 stock_log 这个数据:

sku 日期 数量的股票
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 天没有股票
111 0
123 2

注:

  • SKU111: 0天没有股票,从今天。 123
  • SKU123: 2天没有股票,从2021-11-21(最后一日期之前没有股票)到今天。
  • SKU146: 不要告诉在此的结果,因为今天它已股票再次从今天。

我希望解释它。

谢谢你的帮助! :)

mysql select sql subquery
2021-11-23 20:11:03
2

最好的答案

1

你可以解决的问题采用下查询:

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组通过的小提琴

2021-11-23 21:19:34

谢谢你非常感谢! 它完美的作品! :)
Nacho Sarmiento
0

我认为这是一个真正的克的事情要做,如果你有一个sql问题建立sql小提琴架构的任何潜在的answerers.

无论如何,这样的:

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

看看这 的小提琴. 工作上MySQL5.6

2021-11-23 20:50:08

谢谢我的朋友,下一次我会做你的建议有关的查询。 干杯!
Nacho Sarmiento

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................