从日期小于最大日期的蜂巢表中选择

时间:2017-09-14 07:35:36

标签: hiveql

我试图从Hive表中选择*,其中名为TRANS_DATE的日期列表示> =比最大TRANS_DATE之前的365天。

以下是我迄今为止尝试过的查询:

select * from TABLE
where (TRANS_DATE > DATE_SUB(max(TRANS_DATE), 365)) and 
        (TRANS_DATE < max(TRANS_DATE));

以下是我遇到的错误: &#34;编译语句时出错:FAILED:SemanticException [错误10128]:第2:28行还不支持UDAF&#39; max&#39;&#34;

日期格式的一个例子是:&#34; 2006-05-30 00:00:00.0&#34;

查询是将数据从蜂巢表读入Qlikview,所以理想情况下我不想事先定义变量,而是希望动态地进行选择。如果我对Hive感到陌生,那么道歉是否是愚蠢的。

1 个答案:

答案 0 :(得分:0)

在子查询中计算max_date并与表交叉连接:

select * 
  from TABLE a
       cross join --cross join with single row
       (select max(TRANS_DATE) as max_trans_date from TABLE) b 
 where (a.TRANS_DATE > DATE_SUB(b.max_trans_date, 365)) 
   and (a.TRANS_DATE < b.max_trans_date);

使用分析功能:

select a.* from
(select a.*,
       max(TRANS_DATE) over() as max_trans_date 
  from TABLE a) a
 where (a.TRANS_DATE > DATE_SUB(a.max_trans_date, 365)) 
   and (a.TRANS_DATE < a.max_trans_date);