Envisagez de partition by être similaire aux champs que vous souhaitez group by , puis, lorsque les valeurs des partitions changent, la fonction de fenêtrage redémarre à 1
EDITcomme indiqué par a_horse_with_no_name, pour ce besoin nous avons besoin de dense_rank() contrairement à row_number() rank() ou dense_rank() répéter les numéros qu'il attribue. row_number() doit être une valeur différente pour chaque ligne d'une partition. La différence entre rank() et dense_rank() est ce dernier ne "saute" pas les numéros.
Pour votre requête, essayez :
dense_rank() over (partition by Username, Game order by ct."date") as "Attempts"
Au fait, vous ne partitionnez pas et ne commandez pas le même champ ; juste commander par serait suffisant si c'était le besoin. Ce n'est pas ici.