Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何获取上周每天在线的用户?_Sql_Clickhouse - Fatal编程技术网

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。看我编辑过的答案。不,不重要。您的请求返回每周至少访问一次的用户,我需要每天访问一次的用户。好的。我试试看,稍后再来。