>데이터 베이스 >MySQL 튜토리얼 >SQL의 GROUP BY 및 MAX(DATE)를 사용하여 각 그룹의 최신 레코드를 검색하는 방법은 무엇입니까?

SQL의 GROUP BY 및 MAX(DATE)를 사용하여 각 그룹의 최신 레코드를 검색하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-22 07:22:08360검색

How to Retrieve the Latest Record for Each Group Using SQL's GROUP BY and 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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