Impala中的日期/字符串比较不起作用(总是返回false)

时间:2018-07-05 10:15:53

标签: sql hadoop cloudera impala

因此,我目前正在编写一个impala查询,该查询实际上是根据几列对数据进行分组,并根据最新列取其余列的值。但是,由于我想根据日期对数据进行分组,因此在比较数据时查询总是返回false。

我的代码如下。如果我不包括tstamp比较,则代码可以正常工作,但无法根据日期将其分组。

`select * from mytab as x 
    where x.tstamp = 
    (select max(y.tstamp) from mytab as y 
            where x.id_ = y.id_ and x.id = y.id and 
            to_date(x.tstamp) = to_date(y.tstamp));
`

,数据如下。下面的数据只是真实数据的一部分,其中包含许多天的数据并具有更多列。

    tstamp                   id         id_
    2018-06-07 06:39:26.470  10002071   5438221
    2018-06-07 06:39:26.533  10002071   5438221
    2018-06-07 06:39:35.223  10002071   5438221
    2018-06-07 06:39:35.343  10002071   5438222
    2018-06-07 06:39:39.087  10002071   5438222
    2018-06-07 06:39:43.390  10002071   5438222
    2018-06-07 06:39:43.417  10002071   6268470
    2018-06-07 06:39:44.700  10002071   6268470
    2018-06-07 06:39:48.573  10002071   6268470

1 个答案:

答案 0 :(得分:0)

使用窗口功能:

select t.*
from (select t.*,
             max(tstamp) over (partition by id_, id, to_date(tstamp) as max_tstamp
      from t
     ) t
where tstamp = max_tstamp;

也就是说,您的版本应该可以使用,但这很简单。