Come fare una query da tavolo che conta quanti giorni è una SKU senza magazzino

0

Domanda

Ho un database MySQL con una tabella denominata stock_log con questi dati:

sku data quantità 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

Così, ho bisogno di fare una query che conta quanti giorni SKU senza borsa di oggi (2021-11-23), solo se di oggi è senza magazzino, raggruppati per codice articolo. Inoltre, è necessario contare i giorni senza magazzino dall'ultima data in cui si è in stock (a causa di una SKU potrebbe avere in stock 3 giorni consecutivi, poi di nuovo a 0, poi di nuovo è stock e poi di nuovo a 0).

In modo che la query dovrebbe spettacoli:

sku giorni senza magazzino
111 0
123 2

NOTE:

  • SKU 111: 0 giorni, senza un brodo di oggi. 123
  • SKU 123: 2 giorni senza magazzino da 2021-11-21 (l'ultima data senza magazzino) ad oggi.
  • SKU 146: non mostrare questo risultato, perché oggi si è nuovamente disponibile da oggi.

Spero di spiegare bene.

Grazie per il vostro aiuto! :)

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

Migliore risposta

1

È possibile risolvere il problema utilizzando la query successiva:

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 gruppo da violino

2021-11-23 21:19:34

Grazie mille! Funziona perfettamente! :)
Nacho Sarmiento
0

Penso che sia un vero e proprio g cosa da fare se si dispone di una domanda di sql per generare il codice sql violino schema di potenziali utenti.

Comunque, qualcosa di simile a:

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

Vedere questo violino. Funziona su MySQL 5.6

2021-11-23 20:50:08

Grazie amico mio, la prossima volta ti do un suggerimento su query. Evviva!
Nacho Sarmiento

In altre lingue

Questa pagina è in altre lingue

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