如何使用 android room 解决孤岛/间隙问题?

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何使用 android room 解决孤岛/间隙问题?的主要内容,如果未能解决你的问题,请参考以下文章

基于列序列的间隙和孤岛查询/重置行数

使用间隙和孤岛查找连续的时间/日期 - SQL/BigQuery

间隙和孤岛 SQL 错误

如何为间隙和孤岛问题编写查询?

Oracle 排序间隙和孤岛查询

按月、日、小时+间隙和孤岛问题分组