- значение из c
Т.е. в старой версии вернулось бы 0 же
нет, в старой версии Null значение c пропускается..
Ну вы их заменяете честным нулем, вот и не скипает SELECT finalizeAggregation(argMaxStateIf(assumeNotNull(x), y, isNotNull(x))) FROM ( SELECT 1 AS x, 1 AS y UNION ALL SELECT NULL AS x, 2 AS y ) Грубое решение, но работает (если вам нужно сохранить старый тип данных в таблице агрегаций, иначе лучше пересоздать как DJ показал)
а если так создать? CREATE TABLE destination ( a UInt64, st AggregateFunction(argMax, Nullable(Int32), Int32) ) ENGINE = AggregatingMergeTree ORDER BY a;
Ну тогда же туда будут падать нулы? А мне не хочется этого...
Немного не понял, это такое запрос должен быть в Materialized View ?
не будут, это ж внутри агг функции... но можно и проще - не переделывая таблицу SELECT argMaxIf(assumeNotNull(x), y, not isNull(x)) FROM ( SELECT 1 AS x, 1 AS y UNION ALL SELECT null AS x, 2 AS y );
Да argMaxStateIf(assumeNotNull(x), y, isNotNull(x))
только будет падать если в блоке все НУЛЛ. что старая версия давала в таком случае?
Она конвертировала это в 0 )
у вас раньше вполне себе был баг короче. если вставите две строки с нулл-ом, получите 0 в стейте.. так себе работало изначально оно
Да, я верю, что это был баг, однако это поведение у нас считалось корректным)
Обсуждают сегодня