【问题标题】:How does one solve the islands/gaps problem using android room?如何使用 android room 解决孤岛/间隙问题?
【发布时间】:2020-12-08 21:42:47
【问题描述】:

我正在尝试解决这个问题,但很遗憾我无法解决。
假设表格如下所示,我想创建连续数字组。在这个简单的案例中,代码会是什么样子?
|编号 |价值 |
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 5 |
| 5 | 6 |
| 6 | 8 |
| 7 | 9 |

【问题讨论】:

    标签: android sqlite android-room gaps-and-islands


    【解决方案1】:

    如果id 总是无间隙地递增,您可以只使用聚合:

    select min(value) as min_value, max(value) as max_value
    from mytable
    group by id - value
    order by min(value)
    

    否则,我们可以使用row_number() 生成正确的递增id:

    select min(value) as min_value, max(value) as max_value
    from (
        select t.*, row_number() over(order by id) as rn
        from mytable t
    ) t
    group by rn - value
    order by min(value)
    

    【讨论】:

      【解决方案2】:

      您可以使用窗口函数 LAG() 和 SUM():

      select id, value, sum(flag) over (order by id) grp
      from (
        select *, coalesce(value <> lag(value) over (order by id) + 1, 1) flag
        from tablename
      )
      

      请参阅demo
      结果:

      > id | value | grp
      > -: | ----: | --:
      >  1 |     1 |   1
      >  2 |     2 |   1
      >  3 |     3 |   1
      >  4 |     5 |   2
      >  5 |     6 |   2
      >  6 |     8 |   3
      >  7 |     9 |   3
      

      【讨论】:

        猜你喜欢
        • 2021-03-07
        • 1970-01-01
        • 2019-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-25
        • 2022-09-27
        相关资源
        最近更新 更多