SQL/Impala: динамическое определение интервала последнего месяца

Я использую следующий код, чтобы найти данные за последний месяц:

select * from table1 where timestamp > "2016-07-14 00:00:00"

«2016-07-14 00:00:00» вручную выбирается как дата за месяц до сегодняшнего дня. Однако я не хочу менять дату «2016-07-14 00:00:00» каждый раз, когда запускаю ее, поэтому мне интересно, есть ли какая-то функция даты, которую я могу использовать для достижения этой цели? Спасибо!


person Edamame    schedule 14.08.2016    source источник


Ответы (3)


Вы можете использовать DATEADD():

SELECT * FROM table1 WHERE timestamp > DATEADD(month, -1, GETDATE())

Документы: https://msdn.microsoft.com/en-GB/library/ms186819.aspx

person Andy Dunnings    schedule 14.08.2016
comment
Я пробовал выше, но получаю эту ошибку: HiveServer2Error: AnalysisException: не удалось разрешить ссылку на столбец/поле: «месяц» - person Edamame; 15.08.2016

Похоже, у Impala есть собственная встроенная функция: http://www.cloudera.com/documentation/archive/impala/2-x/2-1-x/topics/impala_datetime_functions.html

Я обнаружил, что приведенный ниже запрос работает:

select * from table1 where timestamp > add_months(now(), -1)
person Edamame    schedule 14.08.2016

Выражение now() - interval 1 month дает вам отметку времени на один месяц назад:

[localhost:21000] > select now() - interval 1 month;
+-------------------------------+
| now() - interval 1 month      |
+-------------------------------+
| 2016-07-31 17:14:09.086188000 |
+-------------------------------+

С помощью trunc(..., 'DD') можно округлить начало дня:

[localhost:21000] > select trunc(now() - interval 1 month, 'DD');
+---------------------------------------+
| trunc(now() - interval 1 month, 'dd') |
+---------------------------------------+
| 2016-07-31 00:00:00                   |
+---------------------------------------+

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

select * from table1 where timestamp > trunc(now() - interval 1 month, 'DD');

Вы можете найти более подробную информацию об этих и других функциях даты и времени на странице http://www.cloudera.com/documentation/archive/impala/2-x/2-1-x/topics/impala_datetime_functions.html.

person Zoltan    schedule 31.08.2016