Подзапрос, содержащий агреагатную функцию в Hiveql - PullRequest
0 голосов
/ 22 октября 2018

Почему это не работает в Hiveql?

create table hist (
   id int,
   state int,
   create_date string);

insert into hist values (1, 1, '2017-01-01');
insert into hist values (1, 1, '2017-02-01');
insert into hist values (1, 1, '2017-03-01');
insert into hist values (1, 2, '2017-02-01');
insert into hist values (1, 2, '2017-03-01');
insert into hist values (1, 2, '2017-04-01');

WITH MonthEnd as
(select to_date(trunc(add_months(current_date, -1), 'MM'))
 MonthEndDate)
SELECT date_add(MAX(a.create_date), 0)
  FROM hist a, monthend me
 where a.create_date <=
 (select max(b.create_date) from hist b
  where a.id=b.id and b.state=2
    and b.create_date < me.MonthEndDate) x
   and a.state=1 and a.create_date < me.MonthEndDate;

Я бы ожидал ответа '2017-03-01', но вместо этого я получаю:

Error while compiling statement: FAILED: ParseException line 20:24 cannot recognize input near 'select' 'max' '(' in expression specification

Примечание: я выделяю нижний оператор выбора в Hue перед его выполнением.Оператор select находится в строках 13-17.После запроса на выбор есть другой закомментированный код.Поэтому я понятия не имею, почему он говорит, что ошибка компиляции находится в строке 20.

Единственный вопрос StackOverflow, который я нашел рядом с этим рекомендуемым, я называю подзапросом.Вот почему я добавил «х» после него.Это не помогло.Та же ошибка.

Подзапрос сам по себе работает:

WITH MonthEnd as
(select to_date(trunc(add_months(current_date, -1), 'MM'))
 MonthEndDate)
select max(b.create_date) from hist b, monthend me
 where b.state=2 and b.create_date < me.MonthEndDate;

2017-04-01

Заранее благодарен за любую информацию, которую кто-либо может дать здесь!

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