注意:我使用的是图形数据库(OrientDB是特定的).这使我可以自由地在javascript或groovy中编写服务器端函数,而不是将自己限制为SQL以解决此问题.*
注2:由于这是一个图形数据库,下面的箭头只是描述数据流.我不需要在查询中返回箭头.箭头代表关系.*
我有以时间流方式表示的数据; 即EventC发生在EventA之后的EventB之后,等等.这些数据来自多个来源,所以它不是完全线性的.它需要聚集在一起,这就是我遇到问题的地方.
目前数据看起来像这样:
# | event | next
--------------------------
12:0 | EventA | 12:1
12:1 | EventB | 12:2
12:2 | EventC |
12:3 | EventA | 12:4
12:4 | EventD |
Run Code Online (Sandbox Code Playgroud)
其中"next"是时间流中下一个事件的out()边缘.在图表上,这看起来像:
EventA-->EventB-->EventC
EventA-->EventD
Run Code Online (Sandbox Code Playgroud)
由于这些数据需要聚集在一起,我需要合并重复事件但保留它们的边缘.换句话说,我需要一个选择查询,结果将导致:
-->EventB-->EventC
EventA--|
-->EventD
Run Code Online (Sandbox Code Playgroud)
在此示例中,由于EventB和EventD都发生在EventA之后(仅在不同时间),因此select查询将显示EventA的两个分支,而不是两个单独的时间流.
编辑#2
如果要将一组额外的数据添加到上面的数据中,使用EventB-> EventE,结果数据/图形将如下所示:
# | event | next
--------------------------
12:0 | EventA | 12:1
12:1 | EventB | 12:2
12:2 | EventC |
12:3 | EventA | 12:4
12:4 | EventD |
12:5 | EventB | …Run Code Online (Sandbox Code Playgroud)