Comment faire une requête à partir de la table qui compte le nombre de jours est un SKU sans stock

0

La question

J'ai une base de données MySQL avec une table appelée stock_log avec ces données:

sku date la quantité de 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

Donc, j'ai besoin de faire une requête qui compte le nombre de jours, un article est sans stock pour aujourd'hui (2021-11-23), seulement si, aujourd'hui, est sans stock, regroupées par numéro de référence. Il doit aussi compter les jours sans stock à partir de la dernière date à laquelle il n'a pas de stock (parce qu'un article pourrait avoir stock 3 jours consécutifs, puis 0, puis de nouveau il a en stock et puis de nouveau à 0).

De sorte que la requête indique:

sku jours sans stock
111 0
123 2

NOTES:

  • SKU 111: 0 jours sans stock à partir d'aujourd'hui. 123
  • SKU 123: 2 jours sans stock de 2021-11-21 (la dernière date sans stock) à aujourd'hui.
  • SKU 146: Ne pas afficher dans ce résultat, car aujourd'hui, il dispose d'un stock de nouveau à partir d'aujourd'hui.

J'espère pour expliquer bien.

Merci pour votre aide! :)

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

La meilleure réponse

1

Vous pouvez résoudre le problème en utilisant requête suivante:

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 groupe de fiddle

2021-11-23 21:19:34

Merci beaucoup! Il fonctionne parfaitement! :)
Nacho Sarmiento
0

Je pense que c'est un vrai g chose à faire si vous avez un sql question pour générer le sql de violon schéma pour un potentiel answerers.

De toute façon, quelque chose comme:

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

Voir ce violon. Fonctionne sur MySQL 5.6

2021-11-23 20:50:08

Merci mon ami, la prochaine fois je vais le faire à votre enseigne sur la requête. Cheers!
Nacho Sarmiento

Dans d'autres langues

Cette page est dans d'autres langues

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