>  기사  >  데이터 베이스  >  MySQL에서 각 회원의 마지막 출석 기록을 검색하는 방법은 무엇입니까?

MySQL에서 각 회원의 마지막 출석 기록을 검색하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-31 12:49:02269검색

How to Retrieve the Last Attendance Record for Each Member in MySQL?

MySQL을 사용하여 각 그룹의 마지막 값 선택

소개

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.