2017-09-17 3 views
0

mysql에서 가장 큰 숫자가 valueforeign_id에 대해 하나의 행을 가져 오는 데 문제가 있습니다. (아래) MySQL의 작품 이상하게도 다른 버전mysql - 순서화 된 하위 쿼리에서 첫 번째 결과를 그룹화합니다.

id foreign_id value 
--------------------- 
1 1   1000 
2 1   2000 
3 2   2000 
4 2   1000 
5 3   2000 

나는 IDS 2,3,5을 끌어하지 1,3,5-

CREATE TABLE `docs` (
    `id` int(11) NOT NULL, 
    `foreign_id` int(6) DEFAULT NULL, 
    `value` int(8) UNSIGNED NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

ALTER TABLE `docs` 
    ADD PRIMARY KEY (`id`), 
    ADD KEY `foreign_id_index` (`foreign_id`); 

INSERT INTO `docs` (`id`, `foreign_id`, `value`) VALUES 
(1, 1, 1000), (2, 1, 2000), (3, 2, 2000), (4, 2, 1000), (5, 3, 2000) 


select 
    docs.id, docs.foreign_id, docs.value 
FROM docs 
INNER JOIN 
    (select id, max(value) from docs group by foreign_id) sub 
    ON sub.id = docs.id 
# expected results are ids (2,3,5), not (1,3,5) 

답변

0

그것이

SELECT D.id, D.foreign_id, max_vals.max_val as value 
FROM docs D 
JOIN 
    (SELECT foreign_id, MAX(value) as max_val 
    FROM docs 
    GROUP BY foreign_id) max_vals 
ON D.foreign_id=max_vals.foreign_id and D.value=max_vals.max_val 
를보기보다 간단 이 경우

, 당신은 어려운 있습니다 JOIN하지 INNER JOIN

필요 동일한 MAX을 가진 foreign_id이 2 이상인 경우 ...

관련 문제