从每个id获取最后一行并将其与count进行比较

时间:2017-10-28 17:34:26

标签: sql database postgresql

我在postgresql数据库中有一个包含消息信息的表。每条消息都有自己的ID和版本号(1,2,3等),但有些版本可能会丢失,因此会出现版本为1,2,4,5等的消息。 我需要做的是找出有多少邮件丢失了他们的版本号。我写了一段代码

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(当前正在检查)插入子查询。有人有想法吗?

1 个答案:

答案 0 :(得分:0)

以下是识别缺失版本的一种方法:

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;