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

发布于 2019-02-09 04:36:59
您可以使用sum()或count()作为窗口函数:
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
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;https://stackoverflow.com/questions/54599797
复制相似问题