Badge visitatore di 30 giorni

Ho notato che questo badge esiste per gli utenti che visitano il forum per 10 o 365 giorni consecutivi, ma vorrei creare un badge automatico nel mio forum che venga assegnato a chi visita il forum per 30 giorni consecutivi.

Soprattutto, ciò che mi interessa è ottenere il codice SQL.

FWIW, puoi trovare le query esistenti usando Data Explorer.

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

Ecco quella per 365 giorni:

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

e per 10 giorni:

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

quindi immagino che questa possa funzionare per 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

… che ho verificato funziona e sembra restituire risultati apparentemente sensati, ma non ho controllato approfonditamente i risultati :sweat_smile:

Grazie mille, lo apprezzo molto.

@merefield

Ho provato a copiare il codice, ma sembra bloccato. Grazie ancora. :heart:

Bloccato? Cosa intendi? (Per favore, scusa il mio spagnolo) Ho appena controllato e funziona perfettamente. Assicurati di aver compilato tutti i campi obbligatori e che non ci siano errori di validazione sopra. Se viene salvato, dovresti vedere il nuovo badge in fondo all’elenco a sinistra. Puoi anche visualizzare l’anteprima dei risultati usando il collegamento sotto l’SQL.

Stavo cercando nel mio forum di copiare la query SQL relativa al badge dei 10 giorni per poi modificarla in 30, ma non mi ha permesso di copiarla. Grazie al tuo aiuto, però, sono riuscito a creare il badge che volevo.