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 ?
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!