30-Tage-Besucherabzeichen

Ich habe gesehen, dass dieses Abzeichen für Benutzer existiert, die das Forum 10 oder 365 Tage in Folge besuchen. Ich möchte jedoch ein automatisches Abzeichen in meinem Forum erstellen, das einer Person verliehen wird, die das Forum 30 Tage in Folge besucht hat.

Vor allem interessiert mich die SQL-Abfrage.

FWIW, du kannst die bestehenden Abfragen im Data Explorer finden.

z. B.: SELECT * from badges WHERE query LIKE '%10 days%'

Hier ist die für 365 Tage:

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

und für 10 Tage:

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

ich vermute also, dass dies für 30 Tage funktionieren könnte:

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

… was ich getestet habe und das anscheinend sinnvolle Ergebnisse liefert, aber ich habe die Ergebnisse noch nicht gründlich überprüft :sweat_smile:

Vielen Dank, ich schätze das sehr.

@merefield

Ich habe versucht, den Code zu kopieren, aber er ist irgendwie blockiert. Danke nochmals. :heart:

Stecken Sie fest? Wie meinen Sie das? (Bitte entschuldigen Sie mein schlechtes Spanisch.) Ich habe es gerade geprüft, und es funktioniert einwandfrei. Prüfen Sie, ob Sie alle erforderlichen Felder ausgefüllt haben und ob oben keine Validierungsfehler angezeigt werden. Wenn Sie speichern, sollten Sie das neue Abzeichen unten in der Liste auf der linken Seite sehen. Sie können die Ergebnisse auch mithilfe des Links unterhalb des SQL-Statements in der Vorschau anzeigen.

Ich habe versucht, in meinem Forum das SQL-Skript vom Badge zu kopieren, das sich auf 10 Tage bezieht, und es dann auf 30 Tage zu ändern, aber es hat mir nicht erlaubt, es zu kopieren. Dank deiner Hilfe konnte ich jedoch den gewünschten Badge erstellen.