Добрый день. Подскажите, пожалуйста, как можно подсчитать сумму из потока событий, если на одну последовательность(id) может прилететь value несколько раз, но взять нужно только первое по времени?
CREATE TABLE raw_events
(
id String,
date DateTime('UTC'),
ts_event UInt64 MATERIALIZED NOW(),
event UInt8,
first_dimension_from_event_1 String,
second_dimension_from_event_1 String,
dimension_from_event_2 String,
value_from_event_2 UInt64
)
ENGINE = MergeTree() PARTITION BY toYYYYMM(date) ORDER BY (id, date) PRIMARY KEY (date, event);
CREATE MATERIALIZED VIEW events_by_month
ENGINE = AggregatingMergeTree() PARTITION BY toYYYYMMDD(date) ORDER BY (date) PRIMARY KEY (date)
AS
SELECT date, dim_1, dim_2, dim_3,
-- Как правильно получить здесь сумму?
uniqueState(id),
sumState(value) as value
--
FROM (
SELECT id,
toStartOfMonth(date) as "date",
argMinIf(first_dimension_from_event_1, ts_event, event = 1) as dim_1,
argMinIf(second_dimension_from_event_1, ts_event, event = 1) as dim_2,
argMinIf(dimension_from_event_2, ts_event, event = 2) as dim_3,
argMinIf(value_from_event_2, ts_event, event = 1) as value
FROM raw_events
GROUP BY id,
date)
GROUP BY date;