如何获得上周每天在线的用户?

时间:2018-11-09 13:53:19

标签: sql clickhouse

数据示例:

id  visiting_time
1   13.01.2001 02:34
1   14.01.2001 02:36
1   15.01.2001 02:36
1   16.01.2001 02:37
1   17.01.2001 02:38
1   18.01.2001 02:39
1   19.01.2001 02:40
2   13.01.2001 02:35
2   15.01.2001 02:36
2   16.01.2001 02:37
2   17.01.2001 02:38
2   18.01.2001 02:39
2   19.01.2001 02:40

我想吸引上周每天都在线的所有用户,例如从1月13日00:00到1月20日00:00。 对于我的数据样本,答案是:

id
1

2 个答案:

答案 0 :(得分:1)

仅当visiting_time列格式为YYYY-MM-DD HH:MM时,以下代码才有效,否则日期不可比较:

SELECT t.id FROM (SELECT id, COUNT(DISTINCT substr(visiting_time, 1, 10)) AS counter From table1 WHERE ((visiting_time >= '2001-01-13 00:00' AND visiting_time < '2001-01-20 00:00')) GROUP BY id) AS t WHERE t.counter=7

答案 1 :(得分:1)

已考虑

  

最后一周的每天,从1月13日00:00到20   一月00:00

  

我自己指出。通常,我可以选择任意天数   想要。

我想它只能用作过滤器,因此任务是“在选定的时间间隔内每天查找用户在线

SELECT id,
       count(DISTINCT toDate(visiting_time)) AS number_of_days_visited
FROM user_visits
WHERE visiting_time BETWEEN '2001-01-13 00:00:00' AND '2001-01-20 00:00:00'
GROUP BY id
HAVING number_of_days_visited =
       round((toUInt32(toDateTime('2001-01-20 00:00:00')) - toUInt32(toDateTime('2001-01-13 00:00:00'))) / 60 / 60 / 24)

在HAVING中,我从WHERE过滤器计算了天数。