итог?
Есть две секретные функции: finalizeAggregation: /** Принимает состояние агрегатной функции. Возвращает результат агрегации. */ runningAccumulate: /** Весьма необычная функция. * Принимает состояние агрегатной функции (например runningAccumulate(uniqState(UserID))), * и для каждой строки блока, возвращает результат агрегатной функции по объединению состояний * от всех предыдущих строк блока и текущей строки. * * То есть, функция зависит от разбиения данных на блоки и от порядка строк в блоке. */ Пример использования: :) SELECT EventDate, finalizeAggregation(state), runningAccumulate(state) FROM (SELECT EventDate, uniqState(UserID) AS state FROM test.hits GROUP BY EventDate ORDER BY EventDate) SELECT EventDate, finalizeAggregation(state), runningAccumulate(state) FROM ( SELECT EventDate, uniqState(UserID) AS state FROM test.hits GROUP BY EventDate ORDER BY EventDate ASC ) ┌──EventDate─┬─finalizeAggregation(state)─┬─runningAccumulate(state)─┐ │ 2014-03-17 │ 36613 │ 36613 │ │ 2014-03-18 │ 36531 │ 54710 │ │ 2014-03-19 │ 36940 │ 69953 │ │ 2014-03-20 │ 36462 │ 83923 │ │ 2014-03-21 │ 35447 │ 96823 │ │ 2014-03-22 │ 31555 │ 108564 │ │ 2014-03-23 │ 31200 │ 119494 │ └────────────┴────────────────────────────┴──────────────────────────┘
Обсуждают сегодня