配置单元-选择最早日期后1年内的行

unguejic  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(395)

我正在尝试选择表中距离最早日期1年以内的所有行。我使用以下代码:

select *
from baskets a
where activitydate < (select date_add((select min(activitydate) mindate_a from baskets), 365) date_b from baskets)
limit 10;

但得到以下错误消息:

Error while compiling statement: FAILED: ParseException line 1:55 cannot recognize input near 'select' 'date_add' '(' in expression specification 

    Total execution time: 00:00:00.338

有什么建议吗?
编辑:使用此代码:

select *
from baskets a
where activitydate < (select date_add(min(activitydate), 365) from baskets)
limit 10;

我得到这个错误:

Error while compiling statement: FAILED: ParseException line 1:55 cannot recognize input near 'select' 'date_add' '(' in expression specification
o0lyfsai

o0lyfsai1#

使用 JOIN 而不是在子查询中选择。我不认为hive支持select in where子句 < 条件。仅限 IN 以及 EXISTS 从Hive0.13开始可以使用:语言手册子查询

SELECT a.*
FROM   baskets a
       JOIN (SELECT DATE_ADD(MIN(b.activitydate), 365) maxdate
             FROM   baskets) b
         ON a.activitydate < b.maxdate
LIMIT  10;
disho6za

disho6za2#

我很想使用窗口函数:

select b.*
from (select b.*, min(activity_date) as min_ad
      from baskets b
     ) b
where activity_date < add_months(min_ad, 12);

如果你真的想让你的语法起作用,试着减少 select 学生:

where activitydate < (select date_add(min(activitydate), 365) from baskets)

相关问题