【发布时间】: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 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 5 |
| 5 | 6 |
| 6 | 8 |
| 7 | 9 |
【问题讨论】:
标签: android sqlite android-room gaps-and-islands
如果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)
【讨论】:
您可以使用窗口函数 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
【讨论】: