同事提了个需求,MySQL的数据库,想将system1、system2、system3的最大版本号对应的num取出来,应该怎么写SQL?
system1,system2,system3,version,num
1,2,3,v1,2
1,2,3,v2,3
1,2,3,v3,4
1,2,4,v1,2
1,2,4,v2,5
创建测试表,
create table t_version(c1 int,c2 int,c3 int,c4 varchar(10),c5 int);
最开始,写的是这条SQL语句,
(select c1, c5 from t_version where c1 = (select max(c1) from t_version) limit 1)
union all
(select c2, c5 from t_version where c2 = (select max(c2) from t_version) limit 1)
union all
(select c3, c5 from t_version where c3 = (select max(c3) from t_version) limit 1)
需求理解错了,这个是按照c1、c2、c3的最大值来计算的。
实际上需要根据"system1、system2、system3的最大版本号对应的num取出来",隐藏的含义是,按照"system1、system2、system3"分组,对应的最大版本号作为条件,如下所示,
select * from t_version
where (c1, c2, c3, c4)
in (select c1, c2, c3, max(c4)
from t_version
group by c1, c2, c3);
其实逻辑不复杂,写这种SQL,最重要的就是能正确理解需求,可能一个"字",就代表了不同的写法,在具备基础SQL编写能力的前提下,还是得多写,才能提升能力。
如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发pyq,
近期更新的文章:
《减脂能吃么?》
《参考文献的引用格式规则》
《金融知识小科普 - 央行逆回购》
《金融知识小科普 - 做空》
《最近碰到的一些问题》
近期的热文:
《"红警"游戏开源代码带给我们的震撼》
文章分类和索引:
《公众号1100篇文章分类和索引》