Hiveql中包含aggreagate函数的子查询

时间:2018-10-22 14:07:01

标签: hiveql

为什么在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语句。 select语句在第13-17行。选择查询后还有其他注释代码。因此,我不知道为什么说编译错误在第20行。

我发现与该建议非常接近的唯一StackOverflow问题将我命名为子查询。这就是为什么我在其后添加“ x”的原因。它没有帮助。同样的错误。

子查询本身可以工作:

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

在此先感谢任何人可以在此处提供的见解!

0 个答案:

没有答案