소개
MySQL 테이블에는 이벤트에 대한 데이터가 있습니다. 각 구성원에 대해 기록된 마지막 출석을 검색하려고 합니다. GROUP BY 절을 사용해도 마지막 출석 대신 첫 번째 출석이 선택되는 문제가 발생합니다. 이 문제를 해결하는 방법을 살펴보겠습니다.
하위 쿼리 및 ORDER BY 사용
한 가지 접근 방식은 하위 쿼리와 ORDER BY를 사용하여 각 구성원의 마지막 참석자를 선택하는 것입니다. :
SELECT id_branch_channel, id_member, attendance, timestamp, id_member FROM ( SELECT * FROM view_event_attendance ORDER BY timestamp DESC ) AS t1 WHERE id_event = 782 GROUP BY id_event, id_member;
이 쿼리는 view_event_attendance 테이블에서 모든 행을 검색하고 타임스탬프 기준으로 내림차순(즉, 가장 최근 항목부터)으로 정렬한 다음 하위 쿼리를 기본 쿼리의 소스로 사용합니다. GROUP BY 절은 구성원별로 결과를 그룹화하고 마지막 출석을 선택하는 데 사용됩니다.
JOIN with a Subquery
또 다른 옵션은 JOIN을 하위 쿼리와 함께 사용하는 것입니다. 각 구성원의 최대 타임스탬프를 찾는 것:
SELECT t1.id_branch_channel, t1.id_member, t1.attendance, t1.timestamp, t1.id_member FROM view_event_attendance AS t1 JOIN ( SELECT id_member, MAX(timestamp) AS max_timestamp FROM view_event_attendance GROUP BY id_member ) AS t2 ON t1.id_member = t2.id_member AND t1.timestamp = t2.max_timestamp WHERE t1.id_event = 782;
이 쿼리에서 view_event_attendance 테이블은 t1로 별칭이 지정되고 각 구성원의 최대 타임스탬프를 계산하는 하위 쿼리(t2로 별칭)와 조인됩니다. JOIN 조건은 회원 ID 및 최대 타임스탬프를 기준으로 행을 일치시켜 각 회원의 마지막 참석만 결과에 포함되도록 합니다.
사용자 정의 집계 및 하위 문자열 사용
더 효율적인 솔루션은 하위 쿼리 대신 사용자 정의 집계와 하위 문자열을 사용하는 것입니다.
SELECT id_branch_channel, id_member, substring(max(concat(from_unixtime(timestamp), attendance)) from 20) as attendance FROM view_event_attendance WHERE id_event = 782 GROUP BY id_event, id_member;
이 쿼리는 타임스탬프와 출석을 각 행의 단일 문자열로 결합하고 max()를 사용하여 각 구성원 그룹 내 최대값입니다. 그런 다음 substring() 함수는 연결된 문자열의 출석 부분을 추출합니다. 이 접근 방식은 하위 쿼리와 관련된 성능 오버헤드를 방지합니다.
위 내용은 MySQL에서 각 회원의 마지막 출석 기록을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!