MySQL에서 Group By를 사용하여 최신 값만 선택
테이블에서 각 구성원의 가장 최근 참석자를 검색하려고 하면 간단한 GROUP BY 쿼리를 사용하여 마지막 참석 대신 초기 참석을 검색하는 상황이 발생할 수 있습니다. 이 문제를 해결하려면 다음과 같은 몇 가지 접근 방식이 있습니다.
하위 쿼리 사용
하위 쿼리를 사용하여 각 멤버의 최대 타임스탬프를 찾은 다음 원래 테이블에 조인할 수 있습니다. 해당 타임스탬프에서 해당 출석을 검색합니다.
<code class="sql">SELECT id_branch_channel, id_member, attendance, timestamp, id_member FROM view_event_attendance AS t1 WHERE id_event = 782 AND timestamp = ( SELECT MAX(timestamp) FROM view_event_attendance AS t2 WHERE t1.id_member = t2.id_member AND t1.id_event = t2.id_event GROUP BY id_event, id_member ) OR timestamp IS NULL GROUP BY id_event, id_member;</code>
파생 테이블 사용
타임스탬프를 기준으로 내림차순으로 행을 정렬하는 파생 테이블을 생성할 수 있습니다. 그런 다음 해당 테이블을 GROUP BY 쿼리의 소스로 사용합니다.
<code class="sql">SELECT id_branch_channel, id_member, attendance, timestamp, id_member FROM ( SELECT id_branch_channel, id_member, attendance, timestamp, id_member FROM view_event_attendance WHERE id_event = 782 ORDER BY timestamp DESC ) AS sorted GROUP BY id_event, id_member;</code>
창 함수 사용
창 함수를 사용하여 전체에서 최대값을 찾을 수 있습니다. 행을 필터링한 다음 해당 최대값을 사용하여 행을 필터링합니다.
<code class="sql">SELECT id_branch_channel, id_member, attendance, timestamp, id_member FROM ( SELECT id_branch_channel, id_member, attendance, timestamp, id_member, MAX(timestamp) OVER (PARTITION BY id_event, id_member) AS max_timestamp FROM view_event_attendance WHERE id_event = 782 ) AS subquery WHERE timestamp = max_timestamp GROUP BY id_event, id_member;</code>
문자열 연결 트릭 사용
이 접근 방식에는 타임스탬프와 출석을 연결하는 작업이 포함됩니다. 단일 문자열을 사용하고 MAX() 함수를 사용하여 가장 큰 문자열을 찾습니다. 최대 문자열에서 출석을 추출하면 최신 출석을 효과적으로 검색할 수 있습니다.
<code class="sql">SELECT id_branch_channel, id_member, SUBSTR(MAX(CONCAT(FROM_UNIXTIME(timestamp), attendance)), 20) AS attendance, timestamp, id_member FROM view_event_attendance WHERE id_event = 782 GROUP BY id_event, id_member;</code>
특정 상황에 가장 적합한 접근 방식은 데이터베이스의 성능 특성과 데이터 세트의 크기에 따라 다릅니다.
위 내용은 MySQL에서 각 회원의 가장 최근 출석을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!