Utilisez SQL pour obtenir efficacement les derniers enregistrements d'activité des utilisateurs
Cet article explique comment interroger la base de données via SQL pour obtenir la dernière date d'enregistrement d'activité de chaque utilisateur.
Supposons que nous ayons une table de base de données qui enregistre les événements de connexion des utilisateurs :
用户名 | 日期 | 数值 |
---|---|---|
brad | 2010-01-02 | 1.1 |
fred | 2010-01-03 | 1.0 |
bob | 2009-08-04 | 1.5 |
brad | 2010-02-02 | 1.2 |
fred | 2009-12-02 | 1.3 |
Méthode facile :
Une approche simple consiste à utiliser une jointure interne pour faire correspondre les noms d'utilisateur et les dernières dates :
<code class="language-sql">select t.username, t.date, t.value from MyTable t inner join ( select username, max(date) as MaxDate from MyTable group by username ) tm on t.username = tm.username and t.date = tm.MaxDate</code>
Cependant, cette approche peut souffrir de doublons d'enregistrements portant la même date.
Utiliser les fonctions de fenêtre :
Afin de résoudre le problème des enregistrements en double, vous pouvez utiliser les fonctions de fenêtre :
<code class="language-sql">select x.username, x.date, x.value from ( select username, date, value, row_number() over (partition by username order by date desc) as _rn from MyTable ) x where x._rn = 1</code>
Cette requête utilise le partitionnement des lignes et la fonction ROW_NUMBER() pour attribuer un classement à chaque enregistrement pour chaque utilisateur, le classement le plus élevé indiquant le dernier enregistrement. La clause WHERE garantit que seuls les enregistrements de rang 1, représentant l'activité la plus récente de chaque utilisateur, sont sélectionnés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!