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 │
└─────────────────────┴───────────┘
*/
→ Ссылка