> 데이터 베이스 > MySQL 튜토리얼 > 결합된 명세서의 각 레코드에 대한 가장 최근 위치 데이터를 효율적으로 검색하는 방법은 무엇입니까?

결합된 명세서의 각 레코드에 대한 가장 최근 위치 데이터를 효율적으로 검색하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-08 02:37:10
원래의
806명이 탐색했습니다.

How to Efficiently Retrieve the Most Recent Location Data for Each Record in a Joined Statement?

결합된 문에서 가장 최근 날짜 선택: 과거 위치 데이터 검색 문제 해결

이 쿼리의 목적은 레코드의 역사적 위치와 해당 날짜. 그러나 현재 구현에서는 실행 시간이 너무 오래 걸리고 중복 레코드가 생성됩니다. 예상되는 출력은 가장 최근 위치가 포함된 단순화된 레코드 목록입니다.

원래 쿼리는 자체 조인 작업을 실행하여 각 레코드 ID와 연결된 가장 최근 날짜를 찾으려고 시도합니다. 그러나 이 접근 방식은 비효율적이며 특히 대규모 데이터 세트의 경우 성능 문제로 이어질 수 있습니다.

올바른 쿼리

쿼리를 최적화하려면 다음과 같이 수정된 쿼리를 활용할 수 있습니다. 버전:

SELECT t1.received_id
     , t1.transaction_id
     , t1.date_modified
     , l.location
  FROM transactions t1
  JOIN ( SELECT received_id, MAX(date_modified) maxmodify FROM transactions GROUP BY received_id) max_record
    ON max_record.received_id = t1.received_id 
   AND max_record.maxmodify = t1.date_modified
  JOIN locations l
    ON l.location_id = t1.location_id
  JOIN received r
    ON r.received_id = t1.received_id
 WHERE t1.received_id = '1782'
 ORDER 
    BY t1.date_modified DESC
로그인 후 복사

설명

이 쿼리에서는 거래 테이블의 각 레코드 ID에 대한 최대 날짜를 찾기 위해 공통 테이블 표현식(CTE)을 도입합니다. . CTE는 다음과 같습니다.

SELECT received_id, MAX(date_modified) AS maxmodify
FROM transactions
GROUP BY received_id
로그인 후 복사

그런 다음 received_id 필드에서 원래 거래 테이블(t1)을 이 CTE(max_record)와 조인합니다. 또한 가장 최근 날짜의 거래만 포함되도록 maxmodify 열을 필터링합니다. 이는 불필요한 조인과 중복을 방지하여 쿼리를 최적화합니다.

이 최적화된 쿼리를 사용하면 각 레코드의 과거 위치를 효과적으로 얻을 수 있으므로 각 고유 레코드 ID에 대해 가장 최근 위치만 검색할 수 있습니다.

위 내용은 결합된 명세서의 각 레코드에 대한 가장 최근 위치 데이터를 효율적으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿