Как сделать запрос из таблицы, которая подсчитывает, сколько дней является артикулом без запасов

0

Вопрос

У меня есть база данных MySQL с таблицей под названием stock_log с этими данными:

sku Дата запас количества
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

Итак, мне нужно сделать запрос, который подсчитывает, сколько дней у артикула нет запасов на сегодняшний день (2021-11-23), только если сегодня нет запасов, сгруппированных по артикулам. Также он должен считать дни без запасов с последней даты, когда у него нет запасов (потому что артикул может иметь запасы 3 дня подряд, затем снова 0, затем снова у него есть запасы, а затем снова 0).

Таким образом, запрос должен показывать:

sku дни без запасов
111 0
123 2

ПРИМЕЧАНИЯ:

  • Артикул 111: 0 дней без запасов с сегодняшнего дня. 123
  • Артикул 123: 2 дня без запасов с 2021-11-21 (последняя дата без запасов) по сегодняшний день.
  • Артикул 146: Не показывайте этот результат, потому что сегодня у него снова есть запас с сегодняшнего дня.

Я надеюсь хорошо это объяснить.

Спасибо за вашу помощь! :)

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

Лучший ответ

1

Вы можете решить проблему с помощью следующего запроса:

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 группируется по скрипке

2021-11-23 21:19:34

Большое вам спасибо! Это отлично работает! :)
Nacho Sarmiento
0

Я думаю, что это действительно хорошая вещь, если у вас есть вопрос sql, чтобы построить схему sql-скрипки для любых потенциальных ответчиков.

В любом случае, что-то вроде:

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

Посмотрите на эту скрипку. Работает на MySQL 5.6

2021-11-23 20:50:08

Спасибо, мой друг, в следующий раз я сделаю твое предложение по поводу запроса. Ура!
Nacho Sarmiento

На других языках

Эта страница на других языках

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