Как рассчитать общее время в SQL, когда столбец меньше 0 - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть таблица в SQL, которая выглядит как на скриншоте ниже, и я пытаюсь вычислить общее количество часов или дней, когда столбец StockLevel меньше или равен 0.

enter image description here

Я пытался вычесть время, когда элемент <= 0, из времени, когда он больше 0, затем <code>SUM до всех часов, но я не смог.

Я хочу добавить общее количество часов в месяце, когда элемент был меньше 0, возможно, вычитая метки времени.

DATE_DIFF((CURRENT_DATE), MAX(DATE(ledger.EventTimeStamp)), DAY) AS Days_OutOfStock,

Спасибо!

1 Ответ

2 голосов
/ 05 ноября 2019

Вы можете использовать функцию LAG, чтобы найти уровень запаса для каждого периода:

SELECT ItemID, StockLevel, EventTimeStamp AS lo,
       LEAD(EventTimeStamp,1) OVER (PARTITION BY itemId ORDER BY EventTimeStamp) AS hi

Это должно дать вам:

ItemID StockLevel lo               hi
536    205        2019-11-05 10:01 null
536    206        2019-11-05 09:37 2019-11-05 10:01

Затем вы можете использовать этот выход, чтобы найтиотрицательные уровни запасов и количество времени

SELECT ItemId, DATEDIFF(HOUR,hi,lo) AS p
  FROM (
        SELECT ItemID, StockLevel, EventTimeStamp AS lo,
          LEAD(EventTimeStamp,1) OVER (PARTITION BY itemId ORDER BY EventTimeStamp) AS hi
  )
 WHERE StockLevel < 0

Вы должны быть в состоянии СУММАТЬ часы по месяцам по ItemID

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...