Como fazer uma consulta de tabela de contagem de quantos dias é um SKU sem estoque

0

Pergunta

Eu tenho um banco de dados MySQL com uma tabela chamada stock_log com esses dados:

sku data quantidade de ações
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

Então, eu preciso fazer uma consulta que conta quantos dias de uma SKU está sem estoque para hoje (2021-11-23), apenas se hoje está sem estoque, agrupados por SKU. Também deve contar os dias sem estoque a partir da última data de quando ele não tem estoque (porque um SKU poderia ter estoque 3 dias consecutivos, em seguida, novamente 0, então, novamente, ele tem o estoque e, em seguida, novamente 0).

Assim, a consulta deve mostra:

sku dias sem estoque
111 0
123 2

NOTAS:

  • SKU 111: 0 dias sem estoque a partir de hoje. 123
  • SKU 123: 2 dias sem estoque de 2021-11-21 (a última data sem estoque) para hoje.
  • SKU 146: não mostrar este resultado porque hoje ele tem estoque novamente a partir de hoje.

Espero que explicar bem.

Obrigado por sua ajuda! :)

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

Melhor resposta

1

Você pode resolver o problema usando a seguinte consulta:

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 grupo de violino

2021-11-23 21:19:34

Muito obrigado! Ele funciona perfeitamente! :)
Nacho Sarmiento
0

Eu acho que é um verdadeiro g coisa a fazer se você tem uma pergunta sql para criar o sql violino esquema para quaisquer potenciais respondentes.

De qualquer maneira, algo como:

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

Veja este violino. Funciona em versões do MySQL 5.6

2021-11-23 20:50:08

Obrigado meu amigo, da próxima vez eu vou fazer o seu sugerir sobre consulta. Saúde!
Nacho Sarmiento

Em outros idiomas

Esta página está em outros idiomas

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