我有一个如下形式的sql表:
id | bookid | version
1|B1|1
2|B2|1
3|B1|2
4|B1|3
5|B1|4
6|B2|2
7|B3|1
哪里 id
是主键。我想找出所有 id
除最新版本外,每一本书都有。版本列的类型为 bigint
. B3
应该从结果中忽略,因为它只有一个版本。
所以基本上我的结果表应该是:
1|B1|1
2|B2|1
3|B1|2
4|B1|3
我的想法:
select id from titles where id not in (
select id, bookid, max(version) from titles group by bookid)
显然上面的查询不起作用。我只需要在我的内部查询中获取id,但是我无法找到groupby和max。上面的查询也没有过滤像b3这样只有一个版本的情况。解决这个问题的方法可能是首先找到所有只有一个版本的id,并让外部查询忽略这些id。
1条答案
按热度按时间hmmo2u0o1#
exists逻辑提供了一种简明的方法来表述查询:
用简单的英语阅读,上面的查询表示返回每个记录,这样我们就可以为同一本书找到一些版本号更高的其他记录。请注意,此逻辑因此排除了最高版本的每本书的记录。