首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在postgresql中找到每台机器的连续5次“人口普查”?

如何在postgresql中找到每台机器的连续5次“人口普查”?
EN

Stack Overflow用户
提问于 2019-02-09 04:33:37
回答 1查看 22关注 0票数 0

嘿,模式是这样的:对于整个数据集,我们应该首先按machine_id排序,然后再按ss2k排序。在此之后,对于每台机器,我们应该找到所有具有连续5标志=‘consecutively’的行。在此数据集中,结果应在第22行到第26行。虽然第11行到第15行也是连续5flag=‘machine_id’,但是因为它们属于不同的标志,所以我们不希望这样。

有人知道如何在postgresql中做到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2019-02-09 04:36:59

您可以使用sum()count()作为窗口函数:

代码语言:javascript
复制
select t.*
from (select t.*,
             count(*) filter (where flag = 'census') over
                  (partition by machine_id
                   order by ss2k
                   rows between 4 preceding and current row
                  ) as census_5_cnt
      from t
     ) t
where census_5_cnt = 5;

注意:这将返回一组5行中的第一行。

编辑:

如果您使用的是不支持filter的旧版本Postgres

代码语言:javascript
复制
select t.*
from (select t.*,
             sum( (flag = 'census)::int ) over 
                  (partition by machine_id
                   order by ss2k
                   rows between 4 preceding and current row
                  ) as census_5_cnt
      from t
     ) t
where census_5_cnt = 5;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54599797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档