MySQL组

时间:2017-01-13 00:45:12

标签: mysql greatest-n-per-group

我有一个带有aID和ref列的表t,如下所示:

aID | ref
-----------
1   | B1.1
1   | B1.2
2   | C1.1
2   | C1.2
3   | D1.1
3   | D1.2

每个aID表示一个活动ID,它是另一个表的外键。列ref是​​该活动的版本控制,例如B1.1,B1.2

我想SELECT * FROM table t GROUP BY t.aID和我得到的结果集是这个

aID | ref
-----------
1   | B1.1
2   | C1.1
3   | D1.1

我想要实现的是这个

aID | ref
-----------
1   | B1.2
2   | C1.2
3   | D1.2

我该怎么办?

3 个答案:

答案 0 :(得分:0)

SELECT aid, MAX(ref) ref FROM my_table GROUP BY aid;

此解决方案的用途有限,并且对于更高版本号将无法使用。规范化版本控制过程。

答案 1 :(得分:0)

如果每个REF值具有相同的格式(1个字母),请使用:

SELECT aID,substr(ref from 1 for 1) as ref1,max(cast(substr(ref,2) as decimal(10,2))) AS ref2 FROM `tabla` group by aID

您将得到如下结果:

enter image description here

或者你可以连接两者:

SELECT aID,concat(substr(ref from 1 for 1),max(cast(substr(ref,2) as decimal(10,2)))) AS ref2 FROM `tabla` group by aID

获得:

enter image description here

答案 2 :(得分:0)

经过一些试验和错误后,我就这样做了

SELECT * FROM table t JOIN (SELECT .aID,max(x.ref) as max_ref 
FROM table x  GROUP BY x.`aID`) t2 
ON t.`swp_activityID` = t2.`swp_activityID` AND t.`refNo` = t2.max_ref

在引用@Bill Karwin编辑的#maximum-n-per-group标签后管理解决它