Insignia de visitante de 30 días

He visto que existe esta insignia para los usuarios que visitan el foro de forma consecutiva durante 10 o 365 días, pero quiero crear una insignia automática en mi foro que se otorgue a una persona que haya visitado el foro durante 30 días consecutivos.

Por encima de todo, lo que me interesa es obtener el SQL.

Por si acaso, puedes consultar las consultas existentes usando el Explorador de Datos.

Ejemplo: SELECT * from badges WHERE query LIKE '%10 days%'

Aquí está la de 365 días:

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

y la de 10 días:

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

así que supongo que esto podría funcionar para 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

… lo cual he verificado que se ejecuta y parece devolver resultados aparentemente coherentes, pero no he revisado los resultados a fondo :sweat_smile:

Muchas gracias, lo aprecio.

@merefield

He estado intentando copiar el código, pero parece que está bloqueado. Gracias de nuevo. :heart:

¿Atascado? ¿Qué quieres decir? (Perdona mi mal español). Acabo de comprobarlo y funciona correctamente. Verifica que hayas rellenado todos los campos obligatorios y que no haya errores de validación arriba. Si se guarda, deberías ver la nueva insignia en la parte inferior de la lista de la izquierda. También puedes previsualizar los resultados usando el enlace situado debajo del SQL.

Estaba intentando en mi foro copiar el SQL del distintivo que hacía referencia a los 10 días y luego cambiarlo a 30, pero no me dejaba copiarlo. Sin embargo, gracias a tu ayuda, pude crear el distintivo que quería.