Jak zrobić zapytanie z tabeli, która liczy ile dni jest dostępny bez zapasów

0

Pytanie

Mam baza danych MySQL z tabelą o nazwie stock_log z tymi danymi:

sku Data zapas ilości
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

Tak więc, muszę złożyć wniosek, który zlicza, ile dni ma artykułu nie ma zapasów na dzień dzisiejszy (2021-11-23), tylko jeśli dziś nie ma zapasów, pogrupowane według артикулам. Musi się także liczyć dni bez zapasów z ostatniego dnia, kiedy nie ma zapasów (bo uzupełniający może mieć zapasy 3 dni z rzędu, a następnie ponownie na 0, a następnie ponownie ma zapasy, a następnie ponownie 0).

W związku z tym wniosek powinien pokazywać:

sku dni bez zapasów
111 0
123 2

UWAGI:

  • Artykuł 111: 0 dni bez zapasów z dzisiejszego dnia. 123
  • Artykuł 123: 2 dni bez zapasów z 2021-11-21 (ostatnia data bez zapasów) do dnia dzisiejszego.
  • Artykuł 146: Nie pokazuj ten wynik, bo dzisiaj ma znowu mam zapas z dzisiejszego dnia.

Mam nadzieję, że dobrze to wyjaśnić.

Dziękuję za pomoc! :)

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

Najlepsza odpowiedź

1

Możesz rozwiązać ten problem za pomocą następującego zapytania:

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 jest zgrupowane na skrzypcach

2021-11-23 21:19:34

Dziękuję bardzo! To działa! :)
Nacho Sarmiento
0

Myślę, że to naprawdę dobra rzecz, jeśli masz pytanie sql, aby zbudować schemat sql-skrzypce dla wszelkich potencjalnych pozwanych.

W każdym razie coś takiego:

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

Spójrz na tę skrzypce. Działa na MySQL 5.6

2021-11-23 20:50:08

Dziękuję, przyjacielu, następnym razem zrobię twoje zdanie na temat wniosku. Hura!
Nacho Sarmiento

W innych językach

Ta strona jest w innych językach

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