반응형
MAX (날짜)를 사용하여 GROUP BY [중복]
이 질문에는 이미 답변이 있습니다.
- 칼럼에 대한 최대 값을 갖는 행 페치 34 답
예를 들어 테이블에 각 열차의 최신 목적지 (MAX 출발 시간)를 나열하려고합니다 .
Train Dest Time
1 HK 10:00
1 SH 12:00
1 SZ 14:00
2 HK 13:00
2 SH 09:00
2 SZ 07:00
원하는 결과는 다음과 같아야합니다.
Train Dest Time
1 SZ 14:00
2 HK 13:00
나는 사용을 시도했다
SELECT Train, Dest, MAX(Time)
FROM TrainTable
GROUP BY Train
에 의해 그룹 별 문에 '대상'을 포함해야한다는 "ora-00979 GROUP BY식이 아님"오류가 발생했습니다. 그러나 분명히 그것은 내가 원하는 것이 아닙니다 ...
한 줄의 SQL로 할 수 있습니까?
그룹화되지 않은 결과 집합에 집계되지 않은 열을 포함 할 수 없습니다. 열차에 목적지가 하나만있는 경우 그룹 별 절에 목적지 열을 추가하면됩니다. 그렇지 않으면 쿼리를 다시 생각해야합니다.
시험:
SELECT t.Train, t.Dest, r.MaxTime
FROM (
SELECT Train, MAX(Time) as MaxTime
FROM TrainTable
GROUP BY Train
) r
INNER JOIN TrainTable t
ON t.Train = r.Train AND t.Time = r.MaxTime
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
다음은 왼쪽 조인 만 사용하는 예제이며 여기에서 방법으로 그룹보다 효율적이라고 생각합니다. ExchangeCore 블로그
SELECT t1.*
FROM TrainTable t1 LEFT JOIN TrainTable t2
ON (t1.Train = t2.Train AND t1.Time < t2.Time)
WHERE t2.Time IS NULL;
다른 해결책 :
select * from traintable
where (train, time) in (select train, max(time) from traintable group by train);
중복이없는 한 (그리고 기차는 한 번에 한 역에만 도착하는 경향이 있습니다) ...
select Train, MAX(Time),
max(Dest) keep (DENSE_RANK LAST ORDER BY Time) max_keep
from TrainTable
GROUP BY Train;
나는 파티에 늦었다는 것을 알고 있지만 이것을 시도하십시오 ...
SELECT
`Train`,
`Dest`,
SUBSTRING_INDEX(GROUP_CONCAT(`Time` ORDER BY `Time` DESC), ",", 1) AS `Time`
FROM TrainTable
GROUP BY Train;
Src : 그룹 Concat 설명서
편집 : 고정 SQL 구문
참고 URL : https://stackoverflow.com/questions/3491329/group-by-with-maxdate
반응형
'IT' 카테고리의 다른 글
재귀 적으로 파일 제거 (0) | 2020.06.22 |
---|---|
objective-c typedef를 해당하는 문자열로 변환 (0) | 2020.06.22 |
특정 위치에서 문자열에 문자를 삽입하는 방법은 무엇입니까? (0) | 2020.06.22 |
“전체 화면” (0) | 2020.06.22 |
Room Persistence lib의 기본 키를 자동 증분으로 만드는 방법 (0) | 2020.06.22 |