2016-10-01 72 views
2

我有一个有700个记录的小桌子。我想挑选每个组的第一条记录。为MySQL中的每个组选择第一行?

查询是以下

SELECT * 
FROM release_image ri 
ORDER BY ri.release_id, ri.position DESC 

和结果集,看起来像下面的图片。正如你所看到的,我想挑头各组的,它应该是:

release_id image_id position 
------------------------------------ 
1   1809  3 
2   1010  1 
3   2240  2 
4   2245  2 
... 

我怎么去说?

enter image description here

+0

如何在此上下文中定义“第一个”?它是“位置”列最高值的记录吗? – Asaph

+0

确切地说,位置最高的记录是第一条记录 – Marco

+0

可能的重复[如何选择MySQL中每个组的第一行?](https://stackoverflow.com/questions/2739474/how-to-select-每个组中的第一行) –

回答

1

您可以GROUP BY和挑MAX位置。

SELECT ri.* 
FROM (
    SELECT ri.release_id, MAX(ri.position) AS position 
    FROM release_image ri 
    GROUP BY ri.release_id 
) ri_max 
INNER JOIN release_image ri ON ri_max.release_id = ri.release_id AND ri_max.position = ri.position 
+2

根据OP对问题的评论,MIN(ri.position)应该是MAX(ri.position)':最高的位置是第一个记录“。 – Asaph

+1

@Asaph编辑。感谢您指出 – Terminus

0

尝试

SELECT * 
FROM release_image ri 
GROUP BY ri.release_id, ri.position DESC; 
0

可能是这样的:

SELECT release_id, image_id, MAX(position) FROM release_image ri group by release_id 

的MySQL允许您将列添加到select条款,不属于group by子句中并没有使用聚合函数。

+0

我不认为“MAX(位置)”对GROUP BY使用哪一行有任何影响。例如,尽管列“MAX(位置)”可能具有最大的位置值,但列“image_id”中的值可以用于任何不相关的位置。 (由于正在使用GROUP BY,所以两列的值不是来自同一行。) – PeteH32

相关问题