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