Cum sa faci o interogare de masă contează cât de multe zile este un SKU fără stoc

0

Problema

Am o baza de date MySQL cu un tabel numit stock_log cu aceste date:

sku data cantitate stoc
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

Deci, am nevoie pentru a face o interogare care contează câte zile o SKU este fără stoc de azi (2021-11-23), numai dacă astăzi este, fără valori, grupate în funcție de SKU. De asemenea, trebuie să număr zilele fără stoc de la ultima dată când acesta nu are stoc (pentru un SKU ar putea avea valori de 3 zile consecutive, apoi din nou de la 0, atunci din nou nu are stoc și apoi din nou 0).

Deci interogarea ar trebui să arată:

sku zile fara stoc
111 0
123 2

NOTE:

  • SKU 111: 0 de zile fără stoc de astăzi. 123
  • SKU 123: 2 zile fara stoc de 2021-11-21 (ultima data fara stoc) de astăzi.
  • SKU 146: nu arată în acest rezultat pentru că astăzi ea are stoc nou de azi.

Sper să-ți explic bine.

Multumesc pentru ajutor! :)

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

Cel mai bun răspuns

1

Puteți rezolva problema folosind următoarea interogare:

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 grup de vioara

2021-11-23 21:19:34

Vă mulțumim foarte mult! Acesta funcționează perfect! :)
Nacho Sarmiento
0

Cred că e o adevărată g lucru pe care trebuie să faceți dacă aveți un sql întrebare pentru a construi sql vioara schema pentru orice potențial respondenti.

Oricum, ceva de genul:

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

Vezi acest vioara. Funcționează pe MySQL 5.6

2021-11-23 20:50:08

Mulțumesc prietenului meu, data viitoare am să-ți sugerez despre interogarea lui. Noroc!
Nacho Sarmiento

În alte limbi

Această pagină este în alte limbi

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