>데이터 베이스 >MySQL 튜토리얼 >SQL의 `GROUP BY` 및 `MAX(DATE)`를 사용하여 각 열차의 최신 목적지를 얻는 방법은 무엇입니까?

SQL의 `GROUP BY` 및 `MAX(DATE)`를 사용하여 각 열차의 최신 목적지를 얻는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-22 07:37:11657검색

How to Get the Latest Destination for Each Train Using SQL's `GROUP BY` and `MAX(DATE)`?

GROUP BYMAX(DATE)을 사용한 SQL 쿼리 [질문 중복]

질문:

주어진 테이블에서 최대 출발 시간을 기준으로 각 열차의 최신 목적지를 가져옵니다. 원하는 출력은 최신 시간을 유지하면서 중복 대상을 제외해야 합니다.

샘플 데이터:

<code>火车    目的地      时间
1        HK        10:00
1        SH        12:00
1        SZ        14:00
2        HK        13:00
2        SH        09:00
2        SZ        07:00</code>

예상 결과:

<code>火车    目的地      时间
1        SZ        14:00
2        HK        13:00</code>

초기 시도:

간단한 GROUP BY 쿼리를 사용하고 MAX(Time):

<code class="language-sql">SELECT Train, Dest, MAX(Time)
FROM TrainTable
GROUP BY Train</code>

오류:

이 쿼리는 Dest 열도 GROUP BY 문에 포함되어야 함을 나타내는 "ora-00979 not a GROUP BY 표현식" 오류를 발생시킵니다. 그러나 이로 인해 각 열차의 목적지가 중복됩니다.

해결책:

원하는 결과를 얻으려면 더 복잡한 쿼리를 사용할 수 있습니다.

<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>

이 쿼리는 먼저 RANK 함수를 사용하여 출발 시간의 내림차순으로 각 목적지에 대한 각 열차의 순위를 계산합니다. PARTITION BY train 절은 순위가 각 열차 그룹 내에서 수행되도록 보장합니다. 마지막으로 쿼리는 dest_rank가 1인 레코드만 검색하여 중복 목적지를 효과적으로 필터링하고 각 열차의 최신 목적지만 유지합니다.

위 내용은 SQL의 `GROUP BY` 및 `MAX(DATE)`를 사용하여 각 열차의 최신 목적지를 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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