从每个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; 
+0

哦,MAX()是解决方案,我完全忘了这一点。 。 万分感谢! – Michal