184 похожих чатов

Привет, прошу помощи. Не обязательно готовое решение, просто ткните куда копать. Есть

данные событий, приблизительно такого формата:

┌──EventDate─┬─SessionID────────────────────────────┐
│ 2020-01-01 │ 9e1c6895-172b-453f-a50b-539fb5247cdb │
│ 2020-01-01 │ 0feb6e63-9888-4583-8645-3b105531a4be │
│ 2020-01-01 │ 99308732-7ad0-44f1-ab23-cd041b9b9059 │
│ 2020-01-01 │ e67ecae0-bfaf-4ee7-a6eb-a17cdcc71bbf │
│ 2020-01-01 │ 75f9bb22-c5e6-4c02-8c62-d81431287746 │
│ │ │
│ 2020-01-02 │ 99308732-7ad0-44f1-ab23-cd041b9b9059 │
│ 2020-01-02 │ 75f9bb22-c5e6-4c02-8c62-d81431287746 │
│ 2020-01-02 │ 46a44ca7-e71a-4a7b-81b6-a896ca824575 │
│ 2020-01-02 │ 9e1c6895-172b-453f-a50b-539fb5247cdb │
│ 2020-01-02 │ 3ac10b96-f992-4ddd-b678-56539866cebc │
└────────────┴──────────────────────────────────────┘

Нужно достать кол-во сессий за один день с разбивкой по 1 часу.

Первое что приходит в голову это такой запрос:

select toStartOfHour(EventTime) k, uniqCombined(SessionID)
from events
where EventDate = '2020-01-01'
group by k order by k

Результат:

┌───────────────────k─┬─uniqCombined(SessionID)─┐
│ 2020-01-01 16:00:00 │ 116 │
│ 2020-01-01 13:00:00 │ 88 │
│ 2020-01-01 22:00:00 │ 73 │
│ 2020-01-01 23:00:00 │ 35 │
│ 2020-01-01 20:00:00 │ 120 │
│ 2020-01-01 17:00:00 │ 114 │
│ 2020-01-01 14:00:00 │ 122 │
│ 2020-01-01 19:00:00 │ 154 │
│ 2020-01-01 18:00:00 │ 129 │
│ 2020-01-01 15:00:00 │ 122 │
│ 2020-01-01 21:00:00 │ 90 │
└─────────────────────┴─────────────────────────┘

Вопрос:

Как правильнее посчитать не просто uniq от сессий по каждому часу,
но еще разделить на New / Returning user.

New - если в текущий час пользователь пришел впервые.
Returning - это если SessionID уже есть в предыдущем периоде.

Или это будет сложный запрос и лучше думать как сохранять IsNew флаг в момент вставки записи?

2 ответов

16 просмотров

проще всего считать новых людей через колонку с флажком. это правда не избавляет от некотроых любопытных спецэффектов, но лучше чем нумеровать их при чтении.

state-ы можно вычитать и складывать, поэтому можно сделать на массивах https://groups.google.com/forum/#!topic/clickhouse/BqE49KuJpw8

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта