Sql 如何获取上周每天在线的用户?
数据示例:Sql 如何获取上周每天在线的用户?,sql,clickhouse,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 0
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
以下代码仅在访问时间列格式为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
以下代码仅在访问时间列格式为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月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)
我计算了从WHERE过滤器开始的天数。
最后一周每天,从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)
在使用WHERE过滤器计算天数时。如何定义上周?和今天相比?和一周开始的某一天相比,我自己也指出了这一点。一般来说,我可以选择任意天数。为什么没有YYYY-MM-DD HH:MM:SS格式?你能给我们看看你的CREATETABLE语句吗?上周你是怎么定义的?和今天相比?和一周开始的某一天相比,我自己也指出了这一点。一般来说,我可以选择任意天数。为什么没有YYYY-MM-DD HH:MM:SS格式?你能给我们看看你的create table语句吗?它不是每天都检查的,它返回的id至少有一个匹配项。我以为你想要不同的id。如果一个用户每天都在表中,您希望他多次吗?我从语句中删除了DISTINCT。看我编辑过的答案。不,不重要。您的请求返回每周至少访问一次的用户,我需要每天访问一次的用户。好的。我会尝试一下,稍后再回来。它不会每天检查,它返回的id至少有一个匹配项。我以为您需要不同的id。如果一个用户每天都在表中,您希望他多次吗?我从语句中删除了DISTINCT。看我编辑过的答案。不,不重要。您的请求返回每周至少访问一次的用户,我需要每天访问一次的用户。好的。我试试看,稍后再来。