>데이터 베이스 >MySQL 튜토리얼 >Inner Join 및 LIMIT를 사용하여 각 서비스의 최신 상태를 검색하는 방법은 무엇입니까?

Inner Join 및 LIMIT를 사용하여 각 서비스의 최신 상태를 검색하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-04 12:02:35344검색

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

Inner Join 및 LIMIT를 사용하여 두 테이블에서 선택

Service 및 Status라는 두 테이블에서 각 서비스의 최신 상태를 검색하려면 Inner Join을 활용할 수 있습니다.

참고로 기존 테이블은 위치:

  • 서비스:

    • 열:

      • ID: 정수
      • 이름: 문자열
  • 상태:

    • 열:

      • id: 정수
      • 상태: 문자열
      • service_id: 정수
      • timestamp: DateTime

원하는 결과는 각 서비스의 최신 상태입니다. , 아래와 같이 표시됩니다.

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

이전 설명에는 제한이 있었습니다. 최신 상태 검색 시:

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

최신 상태를 올바르게 선택하려면 각 서비스의 최대 타임스탬프를 식별하는 하위 쿼리가 필요합니다.

SELECT
  service_id, 
  MAX(timestamp) AS MaxDate
FROM status 
GROUP BY service_id

이 하위 쿼리는 service_id 및 MaxDate라는 두 개의 열이 있는 새 테이블. MaxDate 열은 각 서비스의 최신 타임스탬프를 나타냅니다.

이 하위 쿼리를 사용하면 기본 쿼리를 수정하여 최대 타임스탬프 테이블과 서비스 테이블을 조인할 수 있습니다.

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;

조인하여 service_id와 MaxDate가 모두 표시되므로 각 서비스의 최신 상태만 표시되므로 원하는 결과를 얻을 수 있습니다.

위 내용은 Inner Join 및 LIMIT를 사용하여 각 서비스의 최신 상태를 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.