2012-12-20 2 views
1

그룹화 :MySQL의 : MAX 값을 선택하고이 내가 내 쿼리에서 지금 가지고있는 것입니다

SELECT status, entity_id, MAX(seconds) 
FROM foo 
GROUP BY entity_id, seconds 
: 준 SQL에서

+--------------------+-----------+------------+ 
| status    | entity_id | seconds | 
+--------------------+-----------+------------+ 
| In press/e-publish |  494 | 1352966400 | 
| Rejected   |  520 | 1355817600 | 
| Accepted   |  570 | 1352102400 | 
+--------------------+-----------+------------+ 

: 나는 그것을 같이 할

+--------------------+-----------+------------+ 
| status    | entity_id | seconds | 
+--------------------+-----------+------------+ 
| Submitted   |  494 | 1352102400 | 
| Accepted   |  494 | 1352275200 | 
| In press/e-publish |  494 | 1352966400 | 
| Rejected   |  520 | 1355817600 | 
| Accepted   |  570 | 1352102400 | 
+--------------------+-----------+------------+ 

위의 quasi-SQL은 올바른 것처럼 보이지만 "status"열 값이 올바른 행과 일치하지 않습니다. 뭔가 아래처럼 다시 얻을 :

+--------------------+-----------+------------+ 
| status    | entity_id | seconds | 
+--------------------+-----------+------------+ 
| Submitted   |  494 | 1352966400 | 
| Rejected   |  520 | 1355817600 | 
| Accepted   |  570 | 1352102400 | 
+--------------------+-----------+------------+ 

답변

6

안된하지만,이 같은 보일 것입니다 :

SELECT status, entity_id, seconds 
FROM entities E 
WHERE E.seconds == (
    SELECT MAX(E2.seconds) 
    FROM entities E2 
    WHERE E2.entity_id = E.entity_id 
) 

(귀하의 질문에 대한 SQLfiddle을 설정하는 것은 당신에게 더 테스트 대답 줄 것입니다 : p)를

+0

지금까지 SQL Fiddle에 대해 들어 본 적이 없습니다. 다행히도 저 아래의 포스터가 우리를 위해 SQL Fiddle 페이지를 만들었고 (http://sqlfiddle.com/#!2/e6ab2/12) 질문을 테스트 할 수 있었지만 "=="를 제외하고는 효과가있었습니다. 코스. :) – user785179

+0

Doh! 그건 꽤 어리석은 실수 였어. (홍당무) 특히 올바른 3 줄을 지 었으니 까. – Amadan

2

아래 쿼리는 예상 결과를 제공합니다.

SELECT max(maxsec), status, entity_id from 
(SELECT status, entity_id, MAX(seconds) as maxsec 
FROM table1 
GROUP BY entity_id,status) a GROUP BY entity_id 

스키마가 here으로 생성되었습니다.

+1

SQLFiddle 페이지를 만들어 주셔서 감사합니다. 매우 도움이되며 쿼리가 효과적입니다. – user785179

관련 문제