嘿,
我有一个 Discourse SQL 数据库。我需要查找特定时间戳的用户统计数据。
例如,我需要找出用户在某个时间段内发布了多少帖子?
如果我从 user_stats 表中提取数据,它会给出从用户加入论坛至今的总数,但我需要特定时间段的数据。
有什么建议吗?
嘿,
我有一个 Discourse SQL 数据库。我需要查找特定时间戳的用户统计数据。
例如,我需要找出用户在某个时间段内发布了多少帖子?
如果我从 user_stats 表中提取数据,它会给出从用户加入论坛至今的总数,但我需要特定时间段的数据。
有什么建议吗?
您需要使用新的数据库查询自行生成统计信息。例如,要获取过去 30 天的帖子数量:
SELECT count(*) from posts
WHERE user_id=1
AND created_at > CURRENT_TIMESTAMP - INTERVAL '30 days'
本主题包含许多示例查询,可作为起点:
谢谢 @david ![]()
但如果我想指定具体时间而不是天数,比如查找 2020-2-2 00:00:00 到 2020-3-1 00:00:00 之间的数据,该怎么办?
如果我执行 SELECT count(*) from posts WHERE user_id=16 AND created_at > CURRENT_TIMESTAMP - INTERVAL '30 days'
我得到了一个数字,但查看我的统计数据时,这个数字比实际值要少。
如果你看到这种情况,我从数据库中得到的是 430,但实际应该是 308?

界面中显示的计数仅针对公开且未删除的帖子。数据库中的计数包含所有帖子,包括已删除的帖子、私信以及私密分类中的内容。
但是,如果我想获取某个时间段内的 UI 统计数据呢?
您需要应用类似的过滤器。类似这样:
SELECT count(*) FROM posts p
JOIN topics t ON t.id = p.topic_id
WHERE p.user_id=23968
AND p.deleted_at IS NULL
AND NOT COALESCE(p.hidden, 't')
AND p.post_type = 1
AND t.deleted_at IS NULL
AND COALESCE(t.visible, 't')
AND t.archetype <> 'private_message'
AND p.user_id > 0
AND p.post_number > 1