결합된 문에서 가장 최근 날짜 선택: 과거 위치 데이터 검색 문제 해결
이 쿼리의 목적은 레코드의 역사적 위치와 해당 날짜. 그러나 현재 구현에서는 실행 시간이 너무 오래 걸리고 중복 레코드가 생성됩니다. 예상되는 출력은 가장 최근 위치가 포함된 단순화된 레코드 목록입니다.
원래 쿼리는 자체 조인 작업을 실행하여 각 레코드 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!