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 중국어 웹사이트의 기타 관련 기사를 참조하세요!