2017-09-17 52 views
0

在mysql中,我無法根據最大的value爲每個foreign_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

有困難情況,其中有2個或更多foreign_id s具有相同的MAX value ...