(id, dateOf(at)) значений value по диапазонам [0, 100), [100,200) ... [900, 1000), [1000+] для строк, где condition = 0
                  
                  
                  
                  
                  
                  написал таблицу, mv и view, и это вроде работает как хочется. Но смущают ряды чисел, которые приходится писать и дублировать. Можно это оформить как-то записать лаконичнее?
                  
                  
                  
                  
                  
                  create table foo
                  
                  
                  (
                  
                  
                      id UInt32,
                  
                  
                      at DateTime,
                  
                  
                      is_error UInt8,
                  
                  
                      value UInt64
                  
                  
                  )
                  
                  
                  engine MergeTree()
                  
                  
                  PARTITION BY tuple()
                  
                  
                  order by (id, at);
                  
                  
                  
                  
                  
                  create materialized view foo_summary_mv
                  
                  
                              engine AggregatingMergeTree()
                  
                  
                                  partition by toYYYYMM(day)
                  
                  
                                  order by (id, day)
                  
                  
                              populate
                  
                  
                  as
                  
                  
                  select
                  
                  
                      id,
                  
                  
                      toStartOfDay(at) day,
                  
                  
                      countResampleIfState(0, 1001, 100)(roundDown(value, [0,100,200,300,400,500,600,700,800,900,1000]), is_error = 0) as values,
                  
                  
                      countIfState(is_error = 1) as errors
                  
                  
                  from foo
                  
                  
                  group by id, day;
                  
                  
                  
                  
                  
                  create view foo_summary as
                  
                  
                  select
                  
                  
                      id,
                  
                  
                      day,
                  
                  
                      countResampleIfMerge(0, 1001, 100)(values) as value_range_counts,
                  
                  
                      countIfMerge(errors) as errors_count
                  
                  
                  from foo_summary_mv group by id, day;
                  
                  
                
roundDown можно запихнуть в UDF: create function RD as x -> roundDown(x, [0,100,200,300,400,500,600,700,800,900,1000]); select RD(101);
Обсуждают сегодня