Форматирование подзапросов для правильного захвата групп данных - PullRequest
1 голос
/ 13 июня 2019

Мне было поручено создать запрос, который будет уведомлять нашу команду, когда две производственные этикетки сканируются за слишком короткий промежуток времени.

Таблицы и поля, которые я использую для этого:

MASTER_LABEL - таблица в порядке создания меток. DISPO_DATE заполняется после сканирования метки в системе.

ID     ITEMNO    DISPO_DATE    STANDARD_ID   QTY
-------------------------------------------------
1      ABC       (DATE TIME)    12345        4
2      ABC       (DATE TIME)    12345        4
3      ABC       (DATE TIME)    12345        4
4      EFG       (DATE TIME)    45678        20
5      EFG       (DATE TIME)    45678        20
6      HIJ       (DATE TIME)    91011        14
7      HIJ       (DATE TIME)    91011        14
8      ABC       (DATE TIME)    12345        4
9      ABC       (DATE TIME)    12345        4

СТАНДАРТ - Таблица используется для извлечения времени цикла для расчета среднего времени заполнения контейнера. ЦИКЛЕТ в секундах.

ID         CYCLETM(seconds)
----------------------------------

12345      220
45678      105
91011      175

Базовый код, который у меня есть (я знаю, что он должен быть сильно изменен):

SELECT M.ITEMNO, M.DISPO_DATE, (M.QTY * S.CYCLETM) AS "FILL TIME"
FROM MASTER_LABEL M LEFT OUTER JOIN STANDARD S ON S.ID = M.STANDARD_ID
WHERE M.DISPO_DATE >= SYSDATE - .5
ORDER BY M.ITEMNO, M.DISPO_DATE

В конечном счете, я хочу найти разницу в двух последних разах DISPO_DATE и сравнить их с («временем заполнения» * .5) контейнера. Я хотел бы вытащить только разницу во времени DISPO_DATE, которая составляет <("Fill Time" * .5) </p>

Возможно ли это для некоторых подзапросов и групп по?

Я знаю, что возникнут проблемы со сравнением «времени заполнения» в секундах и разницы в DISPO_DATE в формате «ДАТА ВРЕМЕНИ». Как лучше всего бороться с этим?

Будем весьма благодарны за любые сообщения, на которые вы можете направить меня, или за контент, который поможет с этим. Заранее спасибо за помощь.

1 Ответ

1 голос
/ 13 июня 2019

Вы можете преобразовать разницу двух дат в секунды, умножив на 24 * 60 * 60. Это позволяет сделать сравнение:

SELECT *
FROM (SELECT M.ITEMNO, M.DISPO_DATE, (M.QTY * S.CYCLETM) AS FILL_TIME,
             LAG(M.DISPO_DATE) OVER (PARTITION BY M.ITEMNO ORDER BY M.DISPO_DATE) as PREV_DISPO_DATE
      FROM MASTER_LABEL M LEFT OUTER JOIN
           STANDARD S
           ON S.ID = M.STANDARD_ID
      WHERE M.DISPO_DATE >= SYSDATE - 0.5
     ) MS
WHERE (DISPO_DATE - PREV_DISPO_DATE) * 24 * 60 * 60 > FILL_TIME * 0.5   
ORDER BY M.ITEMNO, M.DISPO_DATE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...