我有一张包含多个ID的表格。每个Id都有按顺序索引排列的值。
create table myValues
(
id int,
ind int,
val int
)
insert into myValues
values
(21, 5, 300),
(21, 4, 310),
(21, 3, 300),
(21, 2, 300),
(21, 1, 345),
(21, 0, 300),
(22, 5, 300),
(22, 4, 300),
(22, 3, 300),
(22, 2, 300),
(22, 1, 395),
(22, 0, 300)
我试图找到相同的连续值的数量。
值字段表示应在每个条目上更改的一些数据(但不一定总体上是唯一的)。
问题是找出具有相同值的两个以上连续行的时间(给定相同的id)。
因此我正在寻找这样的输出:
id ind val count
21 5 300 1
21 4 310 1
21 3 300 2
21 2 300 2
21 1 345 1
21 0 300 1
22 5 300 4
22 4 300 4
22 3 300 4
22 2 300 4
22 1 395 1
22 0 300 1
我知道这与所讨论的岛屿和间隙问题类似here。
然而,这些解决方案都取决于能否使用具有应该连续增加的值的分区语句。
生成“岛屿”范围作为中介的解决方案也可以,例如
id startind endind
21 3 2
22 5 2
请注意,每个ID可以有许多岛屿。
我确信岛屿解决方案有一个简单的改编,但对于我的生活,我无法想到它。
答案 0 :(得分:2)
找到连续组,然后按
执行count()分区select id, ind, val, count(*) over (partition by id, val, grp)
from
(
select *, grp = dense_rank() over (partition by id, val order by ind) - ind
from myValues
) d
order by id, ind desc
答案 1 :(得分:0)
另一种解决方案显然更优雅。我必须自己研究一下。
<% @organisation_requests.each do |org_req| %>
...
<% end %>