>데이터 베이스 >MySQL 튜토리얼 >SQL을 사용하여 주어진 레코드 ID에 대한 가장 최근의 역사적 위치를 효율적으로 검색하는 방법은 무엇입니까?

SQL을 사용하여 주어진 레코드 ID에 대한 가장 최근의 역사적 위치를 효율적으로 검색하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-07 04:46:12598검색

How to Efficiently Retrieve the Most Recent Historic Location for a Given Record ID Using SQL?

Join 문 내에서 MAX 날짜를 사용하여 역사적 위치 검색

특정 레코드 ID에 대한 역사적 위치를 가져올 때 사용자에게 성능 문제가 발생했으며 결과에 항목이 중복되었습니다. 사용자는 여러 테이블을 조인하고 received_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

주요 변경 사항은 트랜잭션 테이블을 두 번 조인하는 것입니다. 한 번은 기본 쿼리에 대해, 한 번은 하위 쿼리 내에서 각 received_id에 대한 최대 date_modified 값을 찾습니다. 그런 다음 이 하위 쿼리는 기본 쿼리를 필터링하고 최신 date_modified 값이 있는 행만 반환하는 데 사용됩니다.

이 기술의 핵심은 다음과 같은 일반 패턴으로 캡슐화됩니다.

SELECT x.*
  FROM my_table x
  JOIN (SELECT id,MAX(thing) max_thing FROM my_table GROUP BY id) y 
    ON y.id = x.id 
   AND y.max_thing = x.thing;

이것은 이 접근 방식은 중복 항목을 효과적으로 제거하고 각 레코드 ID 및 위치에 대해 가장 최근에 수정된 시간만 표시하는 원하는 결과를 제공합니다.

위 내용은 SQL을 사용하여 주어진 레코드 ID에 대한 가장 최근의 역사적 위치를 효율적으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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