如何使用 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 解决孤岛/间隙问题?的主要内容,如果未能解决你的问题,请参考以下文章