我有一个带有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
我该怎么办?
答案 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
您将得到如下结果:
或者你可以连接两者:
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
获得:
答案 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标签后管理解决它