Maison >base de données >tutoriel mysql >Comment récupérer efficacement les enregistrements les plus récents pour chaque méthode et ID dans MySQL et PostgreSQL ?

Comment récupérer efficacement les enregistrements les plus récents pour chaque méthode et ID dans MySQL et PostgreSQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-21 17:33:11247parcourir

How to Efficiently Retrieve the Most Recent Records for Each Method and ID in MySQL and PostgreSQL?

Récupération des enregistrements les plus récents d'une table MySQL

Problème :

Une table MySQL stocke les réponses à divers RPC appels avec des champs pour l'horodatage, la méthode, l'ID et la réponse. L'objectif est de récupérer les réponses les plus récentes pour toutes les combinaisons de méthode et d'ID.

Hypothèses :

  • Pour chaque date, il peut y avoir une réponse pour une méthode/ID donné.
  • Toutes les combinaisons d'appels ne sont pas forcément présentes pour une date donnée.
  • Il existe de nombreuses méthodes, des milliers d'identifiants et au moins 365 dates différentes.

Solution :

La requête suivante peut être utilisée pour récupérer efficacement le résultat souhaité en utilisant des variables MySQL pour éviter un JOIN :

SELECT * FROM (
    SELECT *, if(@last_method=method,0,1) as new_method_group, @last_method:=method 
    FROM rpc_responses 
    ORDER BY method, timestamp DESC
) as t1
WHERE new_method_group=1;

Cette requête attribue d'abord une valeur new_method_group à chaque ligne, qui indique le début d'un nouveau groupe de méthodes. Il filtre ensuite les résultats pour inclure uniquement les lignes avec une valeur new_method_group de 1, garantissant que seule la ligne la plus récente de chaque méthode est incluse dans le résultat final.

Solution alternative pour PostgreSQL :

PostgreSQL fournit une fonctionnalité intégrée pour cette tâche :

SELECT DISTINCT ON (method) timestamp, method, id, response
FROM rpc_responses
WHERE 1 # some where clause here
ORDER BY method, timestamp DESC

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