考虑下表:
id gap groupID
0 0 1
2 3 1
3 7 2
4 1 2
5 5 2
6 7 3
7 3 3
8 8 4
9 2 4
其中groupID
是所需的计算列,例如,只要gap
列大于阈值(在本例中为6),其值就会递增。 id
列定义了行的外观顺序(已经给出了它)。
您能帮我解决一下如何动态填写groupID
的适当值吗?
我在StackOverflow中查看了其他几个条目,并且我已经看到sum
用作窗口函数的聚合。我无法使用sum
,因为 MonetDB 窗口函数(仅rank
,dense_rank
和{{1})不支持})。我不能使用触发器(在记录插入发生之前修改它),因为我需要将上面提到的数据保存在本地临时表中的存储函数中 - 并且MonetDB函数定义中不支持触发器声明
我还尝试通过阅读上一个表格row_num
和groupID
)填写id
列值到另一个临时表(gap
,{{1} },id
),希望这会强制逐行操作。但这也失败了,因为它为所有记录提供了gap
0 :
groupID
非常感谢任何帮助,提示或参考。很长一段时间以来我们都试图解决这个问题。
BTW:MonetDB不支持游标 -
答案 0 :(得分:2)
您可以使用相关子查询分配组。只需计算超过6的先前值的数量:
select id, gap,
(select 1 + count(*)
from t as t2
where t2.id <= t.id and t2.gap > 6
) as Groupid
from t;