Maison > base de données > tutoriel mysql > Comment récupérer le dernier statut de chaque service à l'aide de Inner Join et LIMIT ?

Comment récupérer le dernier statut de chaque service à l'aide de Inner Join et LIMIT ?

Patricia Arquette
Libérer: 2025-01-04 12:02:35
original
334 Les gens l'ont consulté

How to Retrieve the Latest Status for Each Service Using Inner Join and LIMIT?

Sélection parmi deux tables avec jointure interne et LIMIT

Pour récupérer le dernier statut de chaque service dans deux tables, Service et Statut, un la jointure interne peut être utilisée.

Pour référence, les tables existantes sont :

  • Service :

    • Colonnes :

      • id : Entier
      • nom : Chaîne
  • Statut :

    • Colonnes :

      • id : entier
      • statut : chaîne
      • service_id : Entier
      • horodatage : DateTime

Le résultat souhaité est le dernier statut de chaque service, comme indiqué ci-dessous :

id name status timestamp
1 Test1 OK October, 15 2015 09:08:07
2 Test2 OK October, 15 2015 10:15:23

La déclaration précédente avait des limites pour récupérer les derniers statuts :

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
Copier après la connexion

Pour pour assurer la sélection correcte du dernier statut, une sous-requête est nécessaire pour identifier l'horodatage maximum pour chaque service :

SELECT
  service_id, 
  MAX(timestamp) AS MaxDate
FROM status 
GROUP BY service_id
Copier après la connexion

Cette sous-requête crée une nouvelle table avec deux colonnes : service_id et MaxDate. La colonne MaxDate représente le dernier horodatage de chaque service.

À l'aide de cette sous-requête, la requête principale peut être modifiée pour joindre la table Service avec la table d'horodatage maximum :

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;
Copier après la connexion

En rejoignant sur à la fois le service_id et le MaxDate, seul le dernier statut de chaque service sera affiché, garantissant le résultat souhaité.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal