>  기사  >  데이터 베이스  >  MySQL에서 각 회원의 가장 최근 출석을 검색하는 방법은 무엇입니까?

MySQL에서 각 회원의 가장 최근 출석을 검색하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-01 04:35:28502검색

How to Retrieve the Most Recent Attendance for Each Member in MySQL?

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

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