Запрос Hive — Как сравнить дату из одной таблицы, чтобы увидеть, находится ли она между отметкой времени начала и остановки из другой таблицы?

#sql #datetime #hive #hiveql

Вопрос:

Ниже приведен пример запроса, который я пытаюсь выполнить. Что мне нужно — я хочу показать только записи из таблицы trip_3g, где oil_chng_date находится между отметкой времени начала и остановки из таблицы mma для данного идентификатора VIN.

 SELECT trip_3g.vin, 
       trip_3g.start, 
       trip_3g.oil_flag, 
       trip_3g.oil_chng_date,
       mma.vin,
       mma.start,
       mma.end,
       mma.lifecycle_mode,
       mma.auth_mode   
FROM trip_3g
INNER JOIN mma ON trip_3g.vin = mma.vin
WHERE trip_3g.region = 'NA' AND trip_3g.oil_flag = 1
LIMIT 100;
 

Ответ №1:

Попробуйте использовать JOIN с указанными вами условиями:

 SELECT trip_3g.vin,  trip_3g.start,  trip_3g.oil_flag, trip_3g.oil_chng_date,
       mma.vin, mma.start, mma.end, mma.lifecycle_mode, mma.auth_mode   
FROM trip_3g JOIN
     mma
     ON trip_3g.vin = mma.vin AND
        trip_3g.oil_chng_date BETWEEN mma.start and mma.end
WHERE trip_3g.region = 'NA' AND trip_3g.oil_flag = 1
LIMIT 100;
 

Комментарии:

1. Спасибо тебе, Гордон

Ответ №2:

 WHERE ... AND DATEDIFF(day, trip_3g.oil_chng_date, mma.start) <= 0 AND DATEDIFF(day, trip_3g.oil_chng_date, mma.end) >= 0;