Регистрация на диапазонах дат - PullRequest
0 голосов
/ 07 февраля 2020

Я посмотрел другие ответы на этот вопрос, но не нашел решения.

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

Я не могу присоединиться только к самому номеру отслеживания из-за дублирования номера отслеживания в данных за предыдущие месяцы. Ex. номер для отслеживания может появиться в марте 2019 года, а затем в январе 2020 года, даже если отправка отправления будет очень разной. Однако, если вы объедините отслеживание с orderid в таблице состояния, вы получите уникальное значение. Однако этот номер orderid отсутствует в таблице затрат, поэтому вы не можете объединить две таблицы с этим значением. Это должно быть отслеживание и какой-то диапазон дат.

Итак, я собираюсь объединить две таблицы, используя номер отслеживания и диапазон дат + - 30 дней с даты, указанной в таблице затрат, и окончательной даты для этого номера отслеживания в таблице состояния.

Итак, что-то вроде этого без части "находится в окне 30 дней".

SELECT C.cost
     , S.trackingnumber
  From UPSCost C
  join UPSStatus S
    ON C.trackingnumber = S.trackingnumber
 WHERE MAX(S.date_time) is in a 30 day window of C.event_date_time

1 Ответ

0 голосов
/ 07 февраля 2020

Вы можете расширить свой join и добавить к нему условие даты. Как то так.

SELECT      
    C.cost,     
    S.trackingnumber 
From UPSCost C
    join UPSStatus S
    ON(
        -- Same tracking number
        C.trackingnumber = S.trackingnumber AND
        -- status updated within -+30 days from the date found in cost table
        s.date_time between DATE_SUB(C.event_date_time, interval 30 day) AND DATE_ADD(C.event_date_time, interval 30 day)
    )
Order by S.date_time desc -- latest status first?
...