Maison >base de données >tutoriel mysql >Comment récupérer le dernier statut de chaque service à l'aide des jointures SQL ?
Dernières données d'état avec jointure et limite internes
Ce défi consiste à récupérer le dernier statut de chaque service à partir de deux tables : Service et Statut. La table Service contient des informations sur le service, tandis que la table Status contient des mises à jour de statut avec des enregistrements horodatés.
Pour y parvenir, une jointure interne peut être utilisée pour combiner les tables en fonction de la colonne service_id. Cependant, le défi se pose lors de la sélection du dernier statut pour chaque service. L'instruction suivante récupère uniquement le dernier statut du dernier service :
SELECT ser.id, ser.name, a.status, a.timestamp from Service ser inner join (select * from status order by Status.timestamp DESC limit 1) as a on a.service_id = ser.id
Pour récupérer le dernier statut de chaque service, une requête imbriquée est requise :
SELECT ser.id, ser.name, s.status, s.timestamp FROM Service ser INNER JOIN status as s ON s.service_id = ser.id INNER JOIN ( SELECT service_id, MAX(timestamp) AS MaxDate FROM status GROUP BY service_id ) AS a ON a.service_id = s.service_id AND a.MaxDate = s.timestamp;
La requête imbriquée récupère l'horodatage maximum pour chaque service, qui représente le dernier état de ce service. Les résultats sont ensuite joints à la requête principale pour afficher les dernières données d'état pour chaque service.
Grâce à cette approche, le résultat souhaité est obtenu :
id | name | status | timestamp |
---|---|---|---|
1 | Test1 | OK | October, 15 2015 09:08:07 |
2 | Test2 | OK | October, 15 2015 10:15:23 |
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!