Получение последнего дня предыдущего квартала - PullRequest
1 голос
/ 13 мая 2019

Когда я бегу

SELECT
  MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE())-1 QUARTER - INTERVAL 1 DAY

здесь , работает как задумано. Тем не менее, в Hive я получаю ошибку, что мне не хватает закрывающей скобки. Мой запрос:

SELECT t1.*, t2.programme
    FROM table1 t1
    LEFT JOIN (SELECT programme FROM table2
        WHERE yyyy_mm_dd = MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE())-1 QUARTER - INTERVAL 1 DAY
    ) t2 ON t2.id = t1.id AND t2.yyyy_mm_dd = t1.yyyy_mm_dd

Что я сделал не так?

Ошибка при компиляции оператора: FAILED: отсутствует строка ParseException 4:75) в 'QUARTER' рядом с 'QUARTER' l

Мы используем Hive v1.1.0.

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Это можно сделать несколькими способами. Два метода:

select last_day(printf('%04d-%02d-%02d',year(current_date),(month(current_date)-1) div 3 * 3 ,1));

Возвращает:

2019-03-31

Проверено здесь: http://demo.gethue.com/hue/editor?editor=326549

Еще один метод:

select last_day(concat(year(current_date),'-',lpad((month(current_date)-1) div 3 * 3,2,0) ,'-01'))

Тест: http://demo.gethue.com/hue/editor?editor=326554

Важные версии, обратите внимание: В старых версиях Hive current_date может не работать, вместо этого используйте unix_timestamp():

select last_day(concat(year(current_timestamp()),'-',lpad((month(current_timestamp())-1) div 3 * 3,2,0) ,'-01'))

Тест: http://demo.gethue.com/hue/editor?editor=326565

Прочитайте руководство и придумайте свой собственный метод.

1 голос
/ 13 мая 2019

Hive не имеет такой же синтаксис и функции, как MySQL.

Здесь - список всех функций даты, поддерживаемых Hive.

Используя эти функции, ваш запрос SELECT преобразуется в:

SELECT
  date_add(add_months(trunc(date()), (extract(quarter from date()) -1 ) * 3)), -1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...