GROUP BY를 사용하여 그룹에서 최신 레코드 검색
SQL에서 GROUP BY 절은 일반적으로 테이블의 데이터를 그룹화하고 집계하는 데 사용됩니다. . 그러나 특정 시나리오에서는 가장 오래된 레코드가 아닌 각 그룹에서 최신 레코드를 가져와야 할 수도 있습니다.
다음 예를 고려하세요.
SELECT * FROM messages GROUP BY from_id
이 쿼리는 그룹화를 목표로 하지만 from_id 열을 기반으로 레코드를 작성하는 경우 타임스탬프 순서 기준이 없기 때문에 각 그룹에서 가장 오래된 메시지를 선택합니다. 대신 최신 메시지를 검색하려면 다음과 같이 쿼리를 수정해야 합니다.
SELECT t1.* FROM messages t1 JOIN ( SELECT from_id, MAX(timestamp) AS latest_timestamp FROM messages GROUP BY from_id ) t2 ON t1.from_id = t2.from_id AND t1.timestamp = t2.latest_timestamp
이 최적화된 쿼리에서는 하위 쿼리를 활용하여 각 그룹 내의 최신 타임스탬프 값을 식별합니다. 하위 쿼리는 각 from_id에 대한 최대 타임스탬프 값을 계산하고 이를 최신_타임스탬프로 저장합니다.
그런 다음 기본 쿼리는 원본 테이블(메시지)을 하위 쿼리 테이블과 조인하여 from_id를 기반으로 레코드를 일치시킵니다. 또한 원본 테이블의 타임스탬프(t1.timestamp)가 각 그룹의 최신 타임스탬프(t2.latest_timestamp)와 일치하는지 확인합니다.
이 세련된 쿼리는 각 사용자의 최신 메시지를 효과적으로 검색하여 다음을 제공합니다. 원하는 결과를 얻으실 수 있습니다.
위 내용은 SQL의 GROUP BY 절을 사용하여 각 그룹에서 최신 레코드를 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!