Сравнение даты / строки в Impala не работает (всегда возвращает false) - PullRequest
0 голосов
/ 05 июля 2018

Итак, я сейчас пишу импала-запрос, который по существу группирует данные, основанные на нескольких столбцах, и принимает значение оставшейся части столбца на основе самых последних. Однако, поскольку я хочу сгруппировать данные на основе даты, при сравнении данных запрос всегда возвращает 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 голосов
/ 05 июля 2018

Использовать оконные функции:

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;

Тем не менее, ваша версия должна работать, но это проще.

...