Maison  >  Article  >  base de données  >  Comment récupérer la dernière fréquentation de chaque utilisateur à l'aide de la clause GROUP BY de MySQL ?

Comment récupérer la dernière fréquentation de chaque utilisateur à l'aide de la clause GROUP BY de MySQL ?

DDD
DDDoriginal
2024-10-28 05:15:30136parcourir

How to Retrieve the Latest Attendance for Each User Using MySQL's GROUP BY Clause?

Sélection de la dernière valeur à l'aide de Group By dans MySQL

Lorsque vous essayez de récupérer la participation la plus récente de chaque utilisateur à l'aide de la clause GROUP BY de MySQL, vous pouvez rencontrer des cas où la fréquentation initiale est renvoyée au lieu de la dernière valeur souhaitée.

Utilisation d'une sous-requête

Une solution consiste à utiliser une sous-requête pour identifier l'horodatage maximum pour chaque membre et joignez cette sous-requête à la table principale :

<code class="sql">SELECT *
FROM view_event_attendance AS t1
WHERE id_event = 782
AND timestamp = (SELECT MAX(timestamp)
                  FROM view_event_attendance AS t2 
                  WHERE t1.id_member = t2.id_member 
                    AND t1.id_event = t2.id_event 
                  GROUP BY id_event, id_member)
GROUP BY id_event, id_member;</code>

Utilisation de la concaténation et de MAX()

Une approche alternative consiste à concaténer les valeurs d'horodatage et de présence et puis en utilisant MAX() pour sélectionner les valeurs combinées :

<code class="sql">SELECT substring(max(concat(from_unixtime(timestamp),attendance)) from 20) as attendance
FROM view_event_attendance
WHERE id_event = 782
GROUP BY id_event,id_member;</code>

Cette méthode renvoie uniquement la dernière valeur de présence pour chaque membre.

Sélection de l'horodatage/présence concaténé

Si vous préférez récupérer l'horodatage et les valeurs de présence concaténés, vous pouvez utiliser la requête suivante :

<code class="sql">SELECT concat(from_unixtime(timestamp),attendance), timestamp, attendance
FROM view_event_attendance
WHERE id_event = 782
GROUP BY id_event,id_member;</code>

Considérations sur les performances

Lors de la négociation avec de grands ensembles de données, les sous-requêtes peuvent être coûteuses en termes de calcul. La concaténation des valeurs et l'utilisation de MAX() peuvent offrir de meilleures performances. Cependant, il est important d'évaluer les exigences spécifiques et les caractéristiques de la base de données pour déterminer la solution optimale pour votre cas d'utilisation.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn