[SQL] MAX와 GROUP BY (DATE) [중복]
SQLMAX와 GROUP BY (DATE) [중복]
나는 예를 들어, 테이블의 각 열차에 대한 최신 대상 (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이 아닌 그룹의"를 가지고에 의해. 하지만 확실히 그게 내가 원하는 게 아니에요 ...
그것은 SQL 한 줄에 그것을 할 수 있습니까?
해결법
-
==============================
1.당신은 그룹화되지 않은 사용자의 결과 집합에 집계되지 않은 열을 포함 할 수 없습니다. 기차는 단 하나 개의 목적이있는 경우, 다만, 그렇지 않으면 당신은 당신의 쿼리를 다시 생각해야 조항에 의해 그룹에 대상 열을 추가합니다.
당신은 그룹화되지 않은 사용자의 결과 집합에 집계되지 않은 열을 포함 할 수 없습니다. 기차는 단 하나 개의 목적이있는 경우, 다만, 그렇지 않으면 당신은 당신의 쿼리를 다시 생각해야 조항에 의해 그룹에 대상 열을 추가합니다.
시험:
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
-
==============================
2.
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
-
==============================
3.여기에 단지 왼쪽을 사용하는 예는 조인 그리고 나는 거기에서 방법으로 어떤 그룹보다 더 효율적이라고 생각 : ExchangeCore 블로그
여기에 단지 왼쪽을 사용하는 예는 조인 그리고 나는 거기에서 방법으로 어떤 그룹보다 더 효율적이라고 생각 : 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;
-
==============================
4.또 다른 방법 :
또 다른 방법 :
select * from traintable where (train, time) in (select train, max(time) from traintable group by train);
-
==============================
5.만큼 더 중복이없는 것처럼 (그리고 기차가 한 번에 하나 개의 역에 도착하는 경향이있다) ...
만큼 더 중복이없는 것처럼 (그리고 기차가 한 번에 하나 개의 역에 도착하는 경향이있다) ...
select Train, MAX(Time), max(Dest) keep (DENSE_RANK LAST ORDER BY Time) max_keep from TrainTable GROUP BY Train;
-
==============================
6.나는 파티에 늦게 해요 알고 있지만 이것을 시도 ...
나는 파티에 늦게 해요 알고 있지만 이것을 시도 ...
SELECT `Train`, `Dest`, SUBSTRING_INDEX(GROUP_CONCAT(`Time` ORDER BY `Time` DESC), ",", 1) AS `Time` FROM TrainTable GROUP BY Train;
SRC : 그룹 CONCAT 문서
편집 : 고정 된 SQL 구문
from https://stackoverflow.com/questions/3491329/group-by-with-maxdate by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 조건 내에서 JOIN 또는 WHERE (0) | 2020.03.13 |
---|---|
[SQL] MySQL의 오류 : 키 길이없는 키 사양 (0) | 2020.03.13 |
[SQL] 왼쪽은 SQL Server의 성능을 가입 대 INNER는 가입 (0) | 2020.03.13 |
[SQL] 어떻게 SQL Server의 테이블에서 열 이름을 얻을 수 있나요? (0) | 2020.03.13 |
[SQL] 이 쿼리는 쉼표로 구분 된 목록의 SQL 서버를 만들기 위해 무엇을? (0) | 2020.03.13 |