Подсчет уникальных значений за день, если у отметки времени есть часы - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть набор данных:

timestamp               event   user
2020-04-28 20:07:55.503 log_in  john
2020-04-28 20:08:01.996 log_out john
2020-04-28 20:08:02.470 log_in  john
2020-04-28 20:08:03.996 log_out john
2020-04-28 20:08:05.729 log_failed  john
2020-04-29 10:06:45.683 log_in  mark
2020-04-29 10:08:58.299 password_change mark
2020-04-30 14:19:24.921 log_in  jeff
2020-04-30 14:20:31.266 log_out jeff
2020-04-30 14:21:44.438 create_new_user jeff
2020-04-30 14:22:44.455 create_new_user jeff

Как написать запрос sql для подсчета всех уникальных событий в день. неясная часть для меня - присутствие часов в метке времени. Желаемый результат выглядит так:

timestamp  count       
2020-04-28 3 
2020-04-29 2
2020-04-30 3

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Я думаю, что синтаксис Clickhouse:

select distinct toDate(timestamp), event
from t;

РЕДАКТИРОВАТЬ:

Если вы хотите считать события, используйте count(distinct):

select toDate(timestamp), count(distinct event)
from t
group by toDate(timestamp);
0 голосов
/ 29 апреля 2020
create table xx(timestamp DateTime64(3), event String, user String) Engine=Memory;
insert into xx values
('2020-04-28 20:07:55.503','log_in', 'john'),
('2020-04-28 20:08:01.996','log_out','john'),
('2020-04-28 20:08:02.470','log_in','john'),
('2020-04-28 20:08:03.996','log_out','john'),
('2020-04-28 20:08:05.729','log_failed','john'),
('2020-04-29 10:06:45.683','log_in','mark'),
('2020-04-29 10:08:58.299','password_change','mark'),
('2020-04-30 14:19:24.921','log_in','jeff'),
('2020-04-30 14:20:31.266','log_out','jeff'),
('2020-04-30 14:21:44.438','create_new_user','jeff'),
('2020-04-30 14:22:44.455','create_new_user','jeff')

SELECT
    toDate(timestamp) AS d,
    uniq(event)
FROM xx
GROUP BY d

┌──────────d─┬─uniq(event)─┐
│ 2020-04-28 │           3 │
│ 2020-04-29 │           2 │
│ 2020-04-30 │           3 │
└────────────┴─────────────┘
...