GROUP BY
및 MAX(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)
:
SELECT Train, Dest, MAX(Time) FROM TrainTable GROUP BY Train
오류:
이 쿼리는 Dest
열도 GROUP BY
문에 포함되어야 함을 나타내는 "ora-00979 not a GROUP BY 표현식" 오류를 발생시킵니다. 그러나 이로 인해 각 열차의 목적지가 중복됩니다.
해결책:
원하는 결과를 얻으려면 더 복잡한 쿼리를 사용할 수 있습니다.
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
이 쿼리는 먼저 RANK
함수를 사용하여 출발 시간의 내림차순으로 각 목적지에 대한 각 열차의 순위를 계산합니다. PARTITION BY train
절은 순위가 각 열차 그룹 내에서 수행되도록 보장합니다. 마지막으로 쿼리는 dest_rank
가 1인 레코드만 검색하여 중복 목적지를 효과적으로 필터링하고 각 열차의 최신 목적지만 유지합니다.
위 내용은 SQL의 `GROUP BY` 및 `MAX(DATE)`를 사용하여 각 열차의 최신 목적지를 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!