[SQL] 어떻게 두 개의 열에서 최대 값을 가진 레코드를 선택하려면?
SQL어떻게 두 개의 열에서 최대 값을 가진 레코드를 선택하려면?
이 질문에 대한 이해할 수있는 제목으로 올 힘들었다. 내가 예와 함께 설명하려고합니다.
우선 오라클 DB에서 간단한 테이블 정보를 가지고 :
year type message
---- ---- -------
2001 1 cakes are yammy
2003 2 apples are dangerous
2012 2 bananas are suspicious
2005 3 cats are tricky
그리고 난 (예를 들어, 유형 = 1 또는 유형 = 2) 특정 유형의 최신 메시지를 선택해야합니다 :
2001 1 cakes are yammy
2012 2 bananas are suspicious
내가 쿼리를 사용 그래서 (BTW, 그러한 상황에서 올바른 방법인가?)
select * from INFO i
where year = (select max(year) from INFO i_last where i.type = i_last.type)
and i.type in (1, 2)
하지만 지금은 내 정보 테이블에 새로운 "분기"열을 추가해야합니다. 그리고 올해 분기 별 최신 기록을 선택합니다.
year quarter type message
---- ------- ---- -------
2001 2 1 cakes are yammy
2012 3 2 onions are cruel
2012 1 2 bananas are suspicious
2005 1 3 cats are tricky
제 1 형 또는 2 최신 기록 될 것입니다 :
2001 2 1 cakes are yammy
2012 3 2 onions are cruel
난 그냥 그것을 할 수있는 쿼리를 상상하고, 당신이 좀 도와 바랍니다 수 없습니다.
해결법
-
==============================
1.분석 기능은 당신의 친구입니다 :
분석 기능은 당신의 친구입니다 :
SELECT MAX( year ) KEEP ( DENSE_RANK LAST ORDER BY year ASC, quarter ASC, message ASC ) AS year, MAX( quarter ) KEEP ( DENSE_RANK LAST ORDER BY year ASC, quarter ASC, message ASC ) AS quarter, MAX( message ) KEEP ( DENSE_RANK LAST ORDER BY year ASC, quarter ASC, message ASC ) AS message, type FROM info GROUP BY type;
SQLFIDDLE
-
==============================
2.이것을 샷 보내기
이것을 샷 보내기
SELECT i.year, i.quarter, i.type, i.message FROM INFO i JOIN INFO iy ON i.type = iy.type JOIN INFO iq ON iq.type = iy.type WHERE i.type IN (1,2) GROUP BY i.year, i.quarter, i.type, i.message HAVING i.year = MAX(iy.year) AND i.quarter = MAX(iq.quarter)
from https://stackoverflow.com/questions/19981190/how-to-select-records-with-maximum-values-in-two-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] INNER는 DB2에 대한 업데이트는 SQL에 가입하세요 (0) | 2020.05.16 |
---|---|
[SQL] 오라클 11G에서 INSERT SELECT 문 (0) | 2020.05.16 |
[SQL] 엔티티 프레임 워크. 테이블의 모든 행을 삭제 (0) | 2020.05.16 |
[SQL] 저장 프로 시저가 CSV 파일에 수출 데이터를 하나 개의 파일 만 수출 (0) | 2020.05.16 |
[SQL] 값이 포스트 그레스 배열에 존재하는지 확인 (0) | 2020.05.16 |