【问题标题】:Group sequential repeated values sqlite分组顺序重复值 sqlite
【发布时间】:2020-09-16 19:30:36
【问题描述】:

我有按顺序重复的数据..

A
A
A
B
B
B
A
A
A

我需要像这样对它们进行分组

A
B
A

使用 sqlite 的最佳方法是什么?

【问题讨论】:

    标签: sql database sqlite window-functions gaps-and-islands


    【解决方案1】:

    假设您有一个定义行顺序的列,例如id,您可以使用窗口函数解决这个间隙和孤岛问题:

    select col, count(*) cnt, min(id) first_id, max(id) last_id
    from (
        select t.*,
            row_number() over(order by id) rn1,
            row_number() over(partition by col order by id) rn2
        from mytable t
    ) t
    group by col, rn1 - rn2
    order by min(id)
    

    我在结果集中添加了几列,以提供有关每个组内容的更多信息。

    【讨论】:

      【解决方案2】:

      如果你定义了一个列来定义行的顺序,比如id,你可以使用窗口函数LEAD()

      select col
      from (
        select col, lead(col, 1, '') over (order by id) next_col
        from tablename
      )
      where col <> next_col
      

      请参阅demo
      结果:

      | col |
      | --- |
      | A   |
      | B   |
      | A   |
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-20
        • 2021-11-21
        • 2019-04-05
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        • 1970-01-01
        相关资源
        最近更新 更多