도전:
타임스탬프와 상태 플래그("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 중국어 웹사이트의 기타 관련 기사를 참조하세요!