User_stats с корректной временной меткой

Привет,

У меня есть база данных Discourse на SQL. Мне нужно получить статистику пользователей за определённый момент времени.
Например: сколько постов написал пользователь?
Если я извлеку эти данные из таблицы user_stats, то получу общее число с момента регистрации на форуме до текущего момента, но мне нужно получить данные за конкретный период.
Есть какие-то идеи?

Вам потребуется самостоятельно сгенерировать статистику, выполнив новый запрос к базе данных. Например, чтобы получить количество постов за последние 30 дней:

SELECT count(*) from posts 
WHERE user_id=1
AND created_at > CURRENT_TIMESTAMP - INTERVAL '30 days'

В этой теме представлено множество примеров запросов, которые вы можете использовать в качестве отправной точки:

Спасибо, @david :slight_smile:

Но что, если я хочу указать точное время вместо дней, например, если мне нужно найти данные между 2020-02-02 00:00:00 и 2020-03-01 00:00:00?

Если я выполняю SELECT count(*) from posts WHERE user_id=16 AND created_at > CURRENT_TIMESTAMP - INTERVAL '30 days',

то получаю число, но при проверке статистики оно оказывается меньше.
Если вы видите это: я получил 430 из базы данных, но на самом деле их 308?
OnPaste.20200302-164643

Счётчик, отображаемый в интерфейсе, учитывает только публичные, не удалённые сообщения. Счётчик в базе данных включает все сообщения, в том числе удалённые, личные сообщения и сообщения в закрытых категориях.

Но что, если я хочу получить этот стат 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