Бейдж гостя на 30 дней

Я видел, что эта значка существует для пользователей, которые посещают форум 10 или 365 дней подряд, но я хочу создать автоматическую значку на своём форуме, которая будет присуждаться пользователю, посетившему форум 30 дней подряд.

Прежде всего, меня интересует получение SQL-запроса.

Кстати, существующие запросы можно найти в Data Explorer.

Например: SELECT * from badges WHERE query LIKE '%10 days%'

Вот запрос для 365 дней:

WITH consecutive_visits AS ( SELECT user_id , visited_at , visited_at - (DENSE_RANK() OVER (PARTITION BY user_id ORDER BY visited_at))::int s FROM user_visits ), visits AS ( SELECT user_id , MIN(visited_at) "start" , DENSE_RANK() OVER (PARTITION BY user_id ORDER BY s) "rank" FROM consecutive_visits GROUP BY user_id, s HAVING COUNT(*) >= 365 ) SELECT user_id , "start" + interval '365 days' "granted_at" FROM visits WHERE "rank" = 1

и для 10 дней:

WITH consecutive_visits AS ( SELECT user_id , visited_at , visited_at - (DENSE_RANK() OVER (PARTITION BY user_id ORDER BY visited_at))::int s FROM user_visits ), visits AS ( SELECT user_id , MIN(visited_at) "start" , DENSE_RANK() OVER (PARTITION BY user_id ORDER BY s) "rank" FROM consecutive_visits GROUP BY user_id, s HAVING COUNT(*) >= 10 ) SELECT user_id , "start" + interval '10 days' "granted_at" FROM visits WHERE "rank" = 1

Полагаю, для 30 дней это должно сработать:

WITH consecutive_visits AS ( SELECT user_id , visited_at , visited_at - (DENSE_RANK() OVER (PARTITION BY user_id ORDER BY visited_at))::int s FROM user_visits ), visits AS ( SELECT user_id , MIN(visited_at) "start" , DENSE_RANK() OVER (PARTITION BY user_id ORDER BY s) "rank" FROM consecutive_visits GROUP BY user_id, s HAVING COUNT(*) >= 30 ) SELECT user_id , "start" + interval '30 days' "granted_at" FROM visits WHERE "rank" = 1

… я проверил, что запрос выполняется и возвращает, похоже, корректные результаты, но пока не провёл тщательной проверки результатов :sweat_smile:

Огромное спасибо, я очень ценю это.

@merefield

Я пытался скопировать код, но он, похоже, заблокирован. Спасибо ещё раз. :heart:

Застряли? Что именно вы имеете в виду? (Прошу прощения за мой плохой испанский) Я только что проверил, и всё работает нормально. Убедитесь, что вы заполнили все обязательные поля, и выше нет ошибок валидации. Если сохранение прошло успешно, вы увидите новый значок в нижней части списка слева. Вы также можете просмотреть результаты, используя ссылку под SQL.

Я пытался в своём форуме скопировать SQL-код из бейджа, относящегося к 10 дням, а затем изменить его на 30, но у меня не получилось его скопировать. Однако благодаря вашей помощи мне удалось создать нужный мне бейдж.