【发布时间】:2015-10-14 21:05:30
【问题描述】:
使用 psql 我想计算每个唯一访问者。
唯一身份访问者是指在不到一小时之前访问过的访问者。
因此,对于以下几行用户和时间戳,我们将获得 4 个唯一身份访问者的总数,其中 user1 和 user2 分别计为 2。
请注意,我不想在 24 小时内按小时汇总。我想在用户首次访问的时间戳后一小时内进行汇总。
我猜一个直接的 sql 表达式不会这样做。
user1,"2015-07-13 08:28:45.247000"
user1,"2015-07-13 08:30:17.247000"
user1,"2015-07-13 09:35:00.030000"
user1,"2015-07-13 09:54:00.652000"
user2,"2015-07-13 08:28:45.247000"
user2,"2015-07-13 08:30:17.247000"
user2,"2015-07-13 09:35:00.030000"
user2,"2015-07-13 09:54:00.652000"
所以 user1 在 8:28 到达,这算作一次命中。他在 8 点 30 分回来,这算零。然后他在 9 点 35 分回来,这距离 8 点 30 分还有一个多小时,所以他又受到了打击。然后他在 9:35 回来,距离上次 9:30 仅 5 分钟,所以这算为零。 user1 的总命中数为 2。 user2 也发生了同样的事情,这意味着两次点击,每一次都使其最终达到 4 次。
【问题讨论】:
-
now want to应该是not want to我假设?请始终声明您的 Postgres 版本。你有一个单独的用户表吗?实际的表定义将有助于查看数据类型和约束:CREATE TABLE脚本或 psql 中\d tbl的输出。假设用户每 60 分钟访问一次呢?即使在很长一段时间内也算作 0 次访问?此外,严格来说,您的定义将排除不到一小时前(从现在开始)的访问。 -
版本是亚马逊上的 Redshift。所以它缺乏某些 postgres 功能。如果用户每 60 分钟访问一次,那么每次访问都会计算一次点击。如果用户在 60 分钟的时间间隔内访问了多次,那么他只会被计算一次。
-
Redshift 不是 Postgres 并且非常有限。我不是粉丝。请记住在问题开始时提供您的版本。
标签: sql postgresql aggregate