Clickhouse кумулятивная сумма покупок с интервалом в 6 часов с начала текущего месяца по сейчас
Есть таблица income_generated c полями:
- uid - id юзера
- event_time - время события, формат ‘YY-MM-DD HH-MM-SS’
- value – сумма покупки
Прошу помощи. Нужно вывести кумулятивную сумму покупок с интервалом в 6 часов с начала текущего месяца по сейчас используя Clickhouse.
Ответы (1 шт):
Автор решения: vladimir
→ Ссылка
Можно использовать array functions:
SELECT
result.1 AS time,
result.2 AS cum_value
FROM
(
SELECT
groupArray(time) AS times,
arrayCumSum(groupArray(value)) AS cum_values,
arrayZip(times, cum_values) AS results,
arrayJoin(results) AS result
FROM
(
SELECT
toStartOfInterval(event_time, toIntervalHour(6)) AS time,
sum(value) AS value
FROM
(
/* emulate the test data set */
SELECT
number % 3 AS uid,
addHours(toStartOfMonth(now()), number * 2) AS event_time,
number * 2 AS value
FROM numbers(32)
)
GROUP BY time
ORDER BY time ASC
)
)
/*
┌────────────────time─┬─cum_value─┐
│ 2021-06-01 00:00:00 │ 6 │
│ 2021-06-01 06:00:00 │ 30 │
│ 2021-06-01 12:00:00 │ 72 │
│ 2021-06-01 18:00:00 │ 132 │
│ 2021-06-02 00:00:00 │ 210 │
│ 2021-06-02 06:00:00 │ 306 │
│ 2021-06-02 12:00:00 │ 420 │
│ 2021-06-02 18:00:00 │ 552 │
│ 2021-06-03 00:00:00 │ 702 │
│ 2021-06-03 06:00:00 │ 870 │
│ 2021-06-03 12:00:00 │ 992 │
└─────────────────────┴───────────┘
*/