Я пытаюсь создать серебряный значок за 10 правок в вики (по всем сообщениям) и золотой значок за 100 правок в вики, однако ни я, ни Помощник форума не можем добиться успеха.
Я экспериментировал с таким форматом, чтобы избежать проблемы с функциями MIN/MAX, когда неверная дата granted_at присваивается при выдаче значка «на ходу» (они обычно работают лучше, когда пользователи ещё не выполнили критерии до появления значка).
Возможно, что-то вроде этого:
SELECT
user_id,
created_at granted_at
FROM (
SELECT
pr.user_id,
pr.created_at,
ROW_NUMBER() OVER (PARTITION BY pr.user_id ORDER BY pr.created_at) as row_number
FROM post_revisions pr
INNER JOIN badge_posts p ON p.id = pr.post_id
WHERE p.wiki = TRUE
AND pr.hidden = FALSE
AND pr.user_id > 0
) AS revisions
WHERE row_number = 100
(Я не включил обычное условие «не включать удалённые темы или посты», так как правки старых вики-страниц, вероятно, всё равно должны учитываться. Я также не добавил механизм заполнения пропущенных данных, но думаю, что этот вариант лучше обновлять ежедневно с помощью триггера.)
После небольшого размышления (и небольшого обсуждения с Бертом ) я считаю, что ROW_NUMBER будет лучшим выбором для этого случая. Я отредактирую запрос выше.