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 ответов

6 просмотров

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

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

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

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

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Привет, запускаю werf в dind в k8s, получаю ошибку на этапе build/beforeSetup: /.werf/stapel/embedded/bin/bash: /.werf/scripts/5898bdfe5214357d3706b879cc8d3d78460fb379607cbd...
florius0
7
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Подскажите, можно ведь комбинировать запись данных в один и тот же Stream через TFileStream и через TCompressionStream поочерёдно? Ну т.е. часть данных мне нужно сжать, часть ...
notme
4
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Кстати на работу никто не хочет, слегка на Сшке подписывать? От 170к в месяц, под Москвой
Andrey Ermakov
6
Карта сайта