집 >데이터 베이스 >MySQL 튜토리얼 >SQL의 GROUP BY 및 MAX(DATE)를 사용하여 각 그룹의 최신 레코드를 검색하는 방법은 무엇입니까?
GROUP BY 및 MAX(DATE)를 사용하는 그룹 [중복]
SQL에서는 특정 열을 기준으로 최신 레코드를 추출하고 다른 열로 그룹화해야 하는 상황이 발생할 수 있습니다. 예를 들어, 테이블에 있는 각 열차의 가장 최근 목적지를 확인해야 할 수도 있습니다.
MAX(시간)으로 그룹화
처음에는 간단한 GROUP BY 문과 MAX(Time)를 사용하여 이를 달성하려고 했지만 이로 인해 오류가 발생했습니다. 이는 GROUP BY 문에서 그룹화되지 않은 열을 집계할 수 없기 때문입니다. 이 문제를 해결하려면 group by 문에 'Dest'를 포함해야 합니다. 그러나 이는 예상한 결과를 생성하지 않습니다.
하위 쿼리 및 RANK 기능 사용
해결책에는 하위 쿼리와 RANK() 함수를 사용하는 것이 포함됩니다. 하위 쿼리는 출발 시간을 기준으로 각 목적지의 순위를 계산하는 중간 테이블을 생성합니다. RANK() 함수는 시간을 기준으로 순위를 부여하며, 각 열차별로 최대값(최근 시간)에 1순위를 부여한다.
마지막 쿼리는 dest_rank가 1인 하위 쿼리에서 열차, 목적지, 시간을 선택합니다. 이렇게 하면 각 열차의 가장 최근 목적지만 가져오게 됩니다.
다음은 업데이트된 SQL 쿼리입니다.
<code class="language-sql">SELECT train, dest, time FROM ( SELECT train, dest, time, RANK() OVER (PARTITION BY train ORDER BY time DESC) dest_rank FROM traintable ) where dest_rank = 1;</code>
이 쿼리는 원하는 결과를 생성합니다.
火车 | 目的地 | 时间 |
---|---|---|
1 | SZ | 14:00 |
2 | HK | 13:00 |
위 내용은 SQL의 GROUP BY 및 MAX(DATE)를 사용하여 각 그룹의 최신 레코드를 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!