> 데이터 베이스 > MySQL 튜토리얼 > 타임스탬프가 있는 데이터베이스에서 사용자별로 가장 최근 행을 선택하는 방법은 무엇입니까?

타임스탬프가 있는 데이터베이스에서 사용자별로 가장 최근 행을 선택하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-13 13:06:46
원래의
496명이 탐색했습니다.

How to Select the Most Recent Row per User in a Database with Timestamps?

각 사용자의 최신 항목 검색: 데이터베이스 솔루션

도전:

타임스탬프와 상태 플래그("in" 또는 "out")가 포함된 데이터베이스 테이블 내에서 각 사용자에 대한 가장 최근 기록을 효율적으로 선택하는 것은 복잡할 수 있으며, 특히 사용자가 동일한 최신 타임스탬프를 공유하는 여러 항목이 있는 경우 더욱 그렇습니다.

접근방식:

이 문제는 두 가지 별도의 SQL 쿼리를 사용하여 해결됩니다.

1. 여러 일치 레코드 쿼리:

이 쿼리는 각 사용자의 최대 타임스탬프가 있는 모든 기록을 식별합니다.

<code class="language-sql">SELECT t1.*
FROM lms_attendance t1
WHERE t1.time = (SELECT MAX(t2.time)
                 FROM lms_attendance t2
                 WHERE t2.user = t1.user);</code>
로그인 후 복사

출력:

ID USER TIME IO
2 9 1370931664 out
3 6 1370932128 out
5 12 1370933037 in

2. 단일 일치 레코드 쿼리:

이 쿼리는 타임스탬프가 동일한 경우 가장 높은 ID의 우선순위를 지정하여 사용자당 가장 최근의 단일 레코드만 반환합니다.

<code class="language-sql">SELECT t1.*
FROM lms_attendance t1
WHERE t1.id = (SELECT t2.id
                 FROM lms_attendance t2
                 WHERE t2.user = t1.user
                 ORDER BY t2.time DESC, t2.id DESC
                 LIMIT 1);</code>
로그인 후 복사

출력:

ID USER TIME IO
2 9 1370931664 out
3 6 1370932128 out
5 12 1370933037 in

설명:

  • 첫 번째 쿼리는 상관 하위 쿼리를 사용하여 각 사용자의 최신 타임스탬프(MAX(time))를 찾은 다음 해당 타임스탬프와 일치하는 모든 항목을 검색합니다. 이는 최신 타임스탬프가 동일한 여러 레코드가 있는 상황을 처리합니다.
  • 두 번째 쿼리는 ORDER BY time DESC, id DESC을 사용하여 최신 타임스탬프와 가장 높은 ID의 우선 순위를 지정하여 LIMIT 1을 사용하여 단일하고 확실한 최신 레코드가 선택되도록 합니다.

이러한 쿼리 중에서 선택하는 것은 최신 타임스탬프가 있는 모든 레코드가 필요한지 아니면 사용자당 가장 최근의 단일 레코드만 필요한지 여부에 따라 다릅니다. 두 번째 쿼리는 레코드가 하나만 필요한 경우 더 간결한 솔루션을 제공합니다.

위 내용은 타임스탬프가 있는 데이터베이스에서 사용자별로 가장 최근 행을 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿