从每个ID获取最后一行并将其与计数进行比较
问题描述:
我有一个包含postgresql数据库中消息信息的表。每封邮件都有自己的ID和版本号(1,2,3等),但可能会发生某些版本将丢失,因此会出现版本为1,2,4,5等的消息。 我需要什么要做的是找出有多少消息缺少他们的版本号。我写了一个代码从每个ID获取最后一行并将其与计数进行比较
select id_msg, count(version)
from message
group by id_msg
having count(version) = (
select version
from message
order by version desc
limit 1
);
但它不是一个妥善的解决办法,因为我不知道如何将消息ID(这是目前正在检查),进入子查询。任何人有想法?
答
这里有一个方法来识别缺少版本:
select id_msg
from message m
group by id_msg
having count(*) <> max(version);
然后,您可以使用子查询计数这些:
select count(*)
from (select id_msg
from message m
group by id_msg
having count(*) <> max(version)
) m;
哦,MAX()是解决方案,我完全忘了这一点。 。 万分感谢! – Michal