SQL에서 MAX(열 값), 다른 열로 구분하여 행을 SELECT하려면 어떻게 해야 하나요?
**내 테이블은 다음과 같습니다.
id home datetime player resource
---|-----|------------|--------|---------
1 | 10 | 04/03/2009 | john | 399
2 | 11 | 04/03/2009 | juliet | 244
5 | 12 | 04/03/2009 | borat | 555
3 | 10 | 03/03/2009 | john | 300
4 | 11 | 03/03/2009 | juliet | 200
6 | 12 | 03/03/2009 | borat | 500
7 | 13 | 24/12/2008 | borat | 600
8 | 13 | 01/01/2009 | borat | 700
최대 값인 datetime
을 갖는 각각의 고유 home
을 선택해야 합니다.
**결과는 다음과 같습니다.
id home datetime player resource
---|-----|------------|--------|---------
1 | 10 | 04/03/2009 | john | 399
2 | 11 | 04/03/2009 | juliet | 244
5 | 12 | 04/03/2009 | borat | 555
8 | 13 | 01/01/2009 | borat | 700
시도했습니다:
-- 1 ..by the MySQL manual:
SELECT DISTINCT
home,
id,
datetime AS dt,
player,
resource
FROM topten t1
WHERE datetime = (SELECT
MAX(t2.datetime)
FROM topten t2
GROUP BY home)
GROUP BY datetime
ORDER BY datetime DESC
작동하지 않습니다. 데이터베이스에 187개의 행이 있지만 결과 집합에 130개의 행이 있습니다.
결과에 home
의 일부 중복이 포함되어 있습니다.
-- 2 ..join
SELECT
s1.id,
s1.home,
s1.datetime,
s1.player,
s1.resource
FROM topten s1
JOIN (SELECT
id,
MAX(datetime) AS dt
FROM topten
GROUP BY id) AS s2
ON s1.id = s2.id
ORDER BY datetime
Nope. 모든 레코드를 제공합니다.
-- 3 ..something exotic:
다양한 결과를 제공합니다.
724
17
거의 다 됐어요! 집과 최대 날짜 시간을 모두 선택한 다음 두 필드의
topten
테이블에 다시 조인하기만 하면 됩니다:자, 갑니다 T-SQL 버전:
[1]: 페이지 (http://www.oreillynet.com/pub/a/mysql/2007/03/29/emulating-analytic-aka-ranking-functions-with-mysql.html) = 3
가장 빠른 ',' 없이 ':' 그룹순 않고 내부 쿼리에는 솔루션이므로 MySQL
'Home' 이 있는 테이블을 사용하여 자신을 많이 얻어맞았다. '표' 에서 '모든 행 사용을 통해 나타나는 결과 왼쪽 참가하십시오 어딜가던지 설정되었습니다. # 39 표, 그 don& 경기를 할 수 없다 '는' b '를 NULL 열을' b '.
다른 조건이 '' 에서 'b' 를 묻는 참가하십시오 일치시키려면 행만 있는 가치에 대해 '에서' 열 (row) 보다 더 큰 datetime 어딜가던지 '.
이 질문에 '이' 가 실린 데이터를 사용하여 왼쪽 참가하십시오 깔의 페어:
마지막으로, 여기서 '만' 는 조항이 있는 페어 '의' b '의 열의 nulll (이들은' *' 표시된 위 표에); 즉, 두 번째 찼음을 인해 '에서' 행 '는 조항을 참가하십시오) 에서 선택한 가장 큰 값을 어딜가던지 열' datetime '.
읽은 SQL 안티패턴: 특히 피하고 데이터베이스 프로그래밍 책을 다른 SQL 팁.
각 'home'에 대해 동일한 'DATETIME'을 가진 행이 두 개 이상 있는 경우에도 작동합니다:
이렇게 하면 원하는 결과를 얻을 수 있을 것 같습니다:
하지만 다른 열도 필요한 경우 원래 테이블과 조인을 수행하면 됩니다(
Michael La Voie
답변 확인).안부 전해주세요.
이 사람들 때문에 것 (주석문입니다 날짜 범위는 1.5 년) 에 극대화됩니다 스레드할 isn& # 39 이 정도 간단해진다는, t:
아니 집선의 필요한 기능을.
건배해요
이 번호요 시도하시겠습니까 쿼리하지 성능은 더 큰 테이블을 위해, 그리고 수도 있습니다. 각 가정과 그 때 두 개 이상의 레코드전자문서의 작동하잖아 없는 날짜가 다르다. 마이클 La 보리 질의입니다 나으뇨 일반 MySQL 에서 1 위.
또는) 의 경우, 또는 해당 db 분석 기능을 제공하는 시도하시겠습니까 postgres
Oracle 이 작동합니다.
이 시도하시겠습니까 SQL Server:
또 다른 방법은 기본적으로 각 그룹의 하위 순위 중 가장 최근의 행일 gt 쿼리하지 사용하여 각 행에 대한 가장 최근의 행뿐만 계산합니다 그룹당 필터링합니다 마찬가지로 다음 순위 = 1
[데모] [1]
다음은 각 행에 대해 더 잘 이해할 수 없는 [인텔®visual 데모] [2] 의 랭크
>. 만약에 글을 읽어 볼 수 있는 # 39, & # 39 같은 두 가지 행뿐만 home&. # 39, & # 39 와 datetime&. 필드 값을 가능
위의 두 개 이상의 행을 반환되므로 쿼리하지 실패하고 세 것이다. 이 문제를 덮기 위해 할 수 있을 것으로 다른 기준을 결정할 수 있는 폭포 위 수행됨을 행의 / 매개변수입니다 / 열 것이다. 샘플 데이터 세트를 보면서 내가 있어야 할 기본 키 열 'id' 는 solaris. 잡깐 자동으로 설정되었습니다 증분식. 그래서 우리는 이 열을 사용할 수 있는 가장 최근의 행일 면변형을 의해 '사례' 를 통해 동일한 쿼리하지 강조표시할 같은 기술서임을
[데모] [3]
이 가운데 가장 높은 id 'datetime 값과 같은 행일 쿼리하지 그들위에 탄력을 받게 됐다
[인텔®visual 데모] [4] 에 랭크 각 행에 대한 없습니다.
[1]: 9/37a0d/16 http://sqlfiddle.com/ #! [2]: 9/37a0d/17 http://sqlfiddle.com/ #! [3]: 9/d2f025/2 http://sqlfiddle.com/ #! [4]: 9/d2f025/3 http://sqlfiddle.com/ #!
이것은 MySQL 버전 (datetime) 에 있는 경우 최대 하나의 엔트리만을 인쇄하는 중복 sim-id?
여기가 시험을 2/0a4ae/1 수 있습니다 http://www.sqlfiddle.com/ #!
# 샘플 데이터
# MySQL 버전과 사용자 변수를
수락됨 Answers& # 39. # 우투
왜안돼요 사용: 홈, 최대 (datetime) 를 선택, 플레이어 리소스에는 마스다테타임 충스러웠으니 topten 그룹순 홈 Did I miss 뭔가?
이 시도하시겠습니까
안부를 K
이것은 쿼리하지 합니다.
그러나 실패할 경우 대부분의 경우 이 수락됨 answer will apc® @michae 벌금 1 을 같습니다.
이 경우 2 명이 모두 같은 쿼리가 있다면 행뿐만 반환되므로 아니라 필요에 따라 서로 다른 호메이드 호메이드 및 Datetime 행뿐만 있는 서로 다른 추가 질의 아래와 같이.