加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL – 选择重复连续序列的计数

发布时间:2020-12-13 15:55:07 所属栏目:百科 来源:网络整理
导读:我有以下表/数据: | user_id | action_id | data |------------------------------------- | 10 | 1 | fly || 10 | 2 | train || 10 | 3 | fly || 10 | 4 | fly || 10 | 5 | fly || 10 | 6 | train || 10 | 7 | fly || 10 | 8 | train || 10 | 9 | fly || 1
我有以下表/数据:

| user_id | action_id | data        |
------------------------------------- 
| 10      |    1      | fly         |
| 10      |    2      | train       |
| 10      |    3      | fly         |
| 10      |    4      | fly         |
| 10      |    5      | fly         |
| 10      |    6      | train       |
| 10      |    7      | fly         |
| 10      |    8      | train       |
| 10      |    9      | fly         |
| 10      |   10      | fly         |

在postgresql中有没有办法计算重复的连续“飞行”事件?在此示例中,结果应为:

counts
------
  1  
  3
  1
  2

解决方法

是的,可以使用滞后窗函数和累积和:

with FlagCTE as (
  select t.action_id,t.data,case when t.data = 'fly' and t.data = lag(t.data) over (order by t.action_id) then 0 else 1 end as Flag
    from some_table t),GroupCTE as (
  select t.action_id,sum(t.Flag) over (order by t.action_id) as GroupId
    from FlagCTE t
   where t.data = 'fly')
select count(*) as counts
  from GroupCTE t
 group by t.GroupId
 order by t.GroupId

SQLFiddle Demo

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读