Maison  >  Article  >  base de données  >  Comment récupérer l'heure de visite la plus récente pour chaque utilisateur unique dans MySQL avec ActiveRecord ?

Comment récupérer l'heure de visite la plus récente pour chaque utilisateur unique dans MySQL avec ActiveRecord ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-30 06:23:03388parcourir

How to Retrieve the Most Recent Visit Time for Each Unique User in MySQL with ActiveRecord?

Utilisation de DISTINCT ON avec MySQL dans ActiveRecord

Lorsque vous traitez des données volumineuses, il est souvent nécessaire d'extraire des informations uniques lors de l'exécution d'opérations de base de données. L'un de ces scénarios consiste à identifier la dernière visite de chaque utilisateur distinct.

Question :

En essayant de récupérer l'heure de visite la plus récente pour chaque utilisateur unique à l'aide de DISTINCT ON syntaxe, une erreur ActiveRecord::StatementInvalid est rencontrée. La requête utilisée était :

<code class="ruby">Event.order(time: :desc).select('DISTINCT ON(user_id) user_id, time')</code>

Solution :

La syntaxe DISTINCT ON est spécifique à PostgreSQL et ne s'applique pas à MySQL. Pour obtenir le résultat souhaité dans MySQL à l'aide d'ActiveRecord, la requête doit être modifiée :

<code class="ruby">Events.group(:user_id).maximum(:time)</code>

Sortie :

Cette requête modifiée produira la sortie attendue, où le les clés représentent des identifiants d'utilisateur uniques et les valeurs représentent l'heure de leurs visites les plus récentes :

{21=>Tue, 18 Dec 2018 11:15:24 UTC +00:00, 23=>Thu, 20 Dec 2018 06:42:10 UTC +00:00}

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