[SQL] 또 다른 열을 기준으로 최대 열 값 그룹과 행 선택
SQL또 다른 열을 기준으로 최대 열 값 그룹과 행 선택
이 간단한 질문해야하지만, 나는 일에 그것을 얻을 수 없습니다 :(
어떻게 다른 열을 기준으로 그룹으로 최대 열 값이 행을 선택하려면?
예를 들어,
나는 다음과 같은 테이블 정의가 :
ID
Del_Index
docgroupviewid
문제는 지금은 처음 docgroupviewid에 의한 결과로 그룹화 할 다음 하나는 가장 높은 del_index을 가지고에 따라, 각 docgroupviewid 그룹에서 하나 개의 행을 선택하는 것입니다.
나는 시도
SELECT docgroupviewid, max(del_index),id FROM table
group by docgroupviewid
그러나이 같은 docgroupviewid와 그룹에서 최초의 ID로 저를 반환 올바른 ID로 나를 돌아 대신.
어떤 아이디어?
해결법
-
==============================
1.나 자신이 여러 번 고생 한 용액을 다른 쿼리에 대해 생각하는 것입니다.
나 자신이 여러 번 고생 한 용액을 다른 쿼리에 대해 생각하는 것입니다.
그 DocGroupViewID 모든 행에 대한 Del_Index가 가장 높은 (최대)이 각 DocGroupViewID 행을 원하는 :
SELECT T.DocGroupViewID, T.Del_Index, T.ID FROM MyTable T WHERE T.Del_Index = ( SELECT MAX( T1.Del_Index ) FROM MyTable T1 WHERE T1.DocGroupViewID = T.DocGroupViewID )
다음 표시 할 하나를 선택 할 수있는 방법이 필요하기 때문에 둘 이상의 행이 같은 Del_Index을 가질 수 있습니다 때 더 복잡한 가져옵니다.
다음과 같이는 RANK () 또는 ROW_NUMBER () 결과를보다 효율적으로 관리를받을 수있는 CTE와 기능을 사용할 수 있습니다 :
-- fake a source table DECLARE @t TABLE ( ID int IDENTITY(1,1) PRIMARY KEY, Del_Index int, DocGroupViewID int ) INSERT INTO @t SELECT 1, 1 UNION ALL SELECT 2, 1 UNION ALL SELECT 3, 1 UNION ALL SELECT 1, 2 UNION ALL SELECT 2, 2 UNION ALL SELECT 2, 2 UNION ALL SELECT 1, 3 UNION ALL SELECT 2, 3 UNION ALL SELECT 3, 3 UNION ALL SELECT 4, 3 -- show our source SELECT * FROM @t -- select using RANK (can have duplicates) ;WITH cteRank AS ( SELECT DocGroupViewID, Del_Index, ID, RANK() OVER (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC) AS RowRank, ROW_NUMBER() OVER (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC) AS RowNumber FROM @t ) SELECT * FROM cteRank WHERE RowRank = 1 -- select using ROW_NUMBER ;WITH cteRowNumber AS ( SELECT DocGroupViewID, Del_Index, ID, RANK() OVER (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC) AS RowRank, ROW_NUMBER() OVER (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC) AS RowNumber FROM @t ) SELECT * FROM cteRowNumber WHERE RowNumber = 1
당신이 관계를 분류 할 수있는 방법이 있다면, 바로 BY 순서에 추가합니다.
-
==============================
2.당신은 당신의 쿼리 조금 복잡 할 것이다 :
당신은 당신의 쿼리 조금 복잡 할 것이다 :
select a.docgroupviewid, a.del_index, a.id from table a where a.del_index = (select max(b.del_index) from table where b.docgroupviewid = a.docgroupviewid)
from https://stackoverflow.com/questions/1425240/select-rows-with-maximum-column-value-group-by-another-column by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL Server 데이터베이스에서 DataTable을 채우기 (0) | 2020.06.10 |
---|---|
[SQL] SQL 서버 2005에서 Active Directory를 쿼리 (0) | 2020.06.10 |
[SQL] MS-SQL 2000에서 where 절에 별칭 컬럼을 사용하여 (0) | 2020.06.10 |
[SQL] 오라클 <>,! =, ^ = 운영 (0) | 2020.06.10 |
[SQL] CakePHP의에서 UNION 구문 (0) | 2020.06.10 |