반응형
MAX(날짜)로 그룹화
표에 각 열차의 최신 목적지(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 not a GROUP BY expression" 오류가 발생하여 "Dest"를 문장으로 그룹에 포함해야 합니다.하지만 확실히 그건 내가 원하는 게 아니야...
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
그룹화되지 않은 집계되지 않은 열은 결과 집합에 포함할 수 없습니다.열차에 목적지가 1개뿐인 경우, 목적지의 열을 by 절에 의해 그룹에 추가합니다.그렇지 않은 경우 쿼리를 재고해야 합니다.
시험:
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
다음은 왼쪽 참여만 사용하는 예입니다.다른 어떤 그룹보다 효율적이라고 생각합니다.ExchangeCore Blog
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;
편집: 고정 SQL 구문
언급URL : https://stackoverflow.com/questions/3491329/group-by-with-maxdate
반응형
'programing' 카테고리의 다른 글
| redex 툴킷에서 리듀서와 엑스트라 리듀서의 차이점은 무엇입니까? (0) | 2023.03.05 |
|---|---|
| Plask에 JSON을 보내는 중, request.args vs request.형태 (0) | 2023.03.05 |
| HTML 대신 javascript에서 필터를 사용하는 방법 (0) | 2023.02.28 |
| 각도 방향의 재귀 (0) | 2023.02.28 |
| 리액트 후크와 함께 show Component Update를 사용하는 방법 (0) | 2023.02.28 |