как я могу рассчитать балл каждого пользователя за день, суммируя все баллы с начала до этого дня в clickhouse

#clickhouse

#clickhouse

Вопрос:

У меня есть эти данные в clickhouse:

введите описание изображения здесь

конечная точка каждого пользователя за день — это сумма (точка) с начала до этого дня. например: балл пользователя 1 в 2020-07-02 равен 800, а в 2020-07-03 равен 200.

Мне нужен этот результат: балл каждого пользователя за день:

введите описание изображения здесь

Ответ №1:

 select uid, d, t from (
select uid, groupArray(date) dg, arrayCumSum(groupArray(spt)) gt from
(select uid, date, sum(pt) spt from
(select 1 tid, '2020-07-01' date, 1 uid, 500 pt
union all 
select 1 tid, '2020-07-02' date, 1 uid, 300 pt
union all 
select 1 tid, '2020-07-03' date, 1 uid, -600 pt)
group by uid, date
order by uid, date)
group by uid) array join dg as d, gt as t

┌─uid─┬─d──────────┬───t─┐
│   1 │ 2020-07-01 │ 500 │
│   1 │ 2020-07-02 │ 800 │
│   1 │ 2020-07-03 │ 200 │
└─────┴────────────┴─────┘
  

Комментарии:

1. Спасибо, но мне нужно знать балл каждого пользователя каждый день, а не только в дни, когда есть транзакция, прямо сейчас у меня есть этот результат: 2020-07-02 500 2020-07-06 650 2020-07-07 1150 2020-07-08 1650 2020-07-12 1850 2020-07-13 1970 2020-07-15 470 2020-07-25 670 2020-08-03 780 2020-08-10 910 2020-08-11 1030 2020-08-12 1410 2020-08-15 1530 Мне нужно знать, что балл этого пользователя в «2020-07-03, 2020-07-04, 2020-07-05» равен 500

2. Для пропущенных дней вы можете объединить результат с некоторой таблицей календаря. Или используйте функцию временных интервалов. Или заказать с помощью заполнения с даты.