我有一个使用空间插件的空间数据图表。
该图具有“威胁区域”(多边形),它们可以位于另一个区域之上,因此它们也具有 z-index 属性。
每个“威胁区域”附属于1到N个威胁场景,有时多个“威胁区域”附属于同一个威胁场景,具有不同的属性。
我正在尝试根据特定位置的 z 索引获取每个威胁场景的顶级威胁区域。
这是我当前的查询,几乎是完美的:
MATCH (asset:Asset{name:'Asset Name'})-[]-(ara:AssetRiskAssessment)
WITH asset, ara
CALL spatial.intersects('threat_zones',asset.wkt) YIELD node
WITH node, asset, ara
MATCH (node)<-[:FOR]-(tss:ThreatScenarioScore)-[]-(ts:ThreatScenario)
RETURN ts.name, max(node.zindex) AS zindex, tss.intention, tss.capability
ORDER BY ts.name, zindex
我的问题 - 如果我删除tss.intenion
, tss.capability
我得到了我正在寻找的东西(正确区域的每个相关威胁场景),但我需要的是tss.intention
and tss.capability
。由于它们的值在区域之间不同,因此 max 函数将它们视为不同的记录。
有没有更好的方法来使用 max 函数来获取我想要的和/或使用嵌套查询来提取意图/能力(这就是我所追求的)?
我想你正在寻找一个“arg 最大值”样式查询。在这种情况下,使用collect是要走的路:
MATCH (asset:Asset {name:'Asset Name'})-[]-(ara:AssetRiskAssessment)
WITH asset, ara
CALL spatial.intersects('threat_zones',asset.wkt) YIELD node
WITH node, asset, ara
MATCH (node)<-[:FOR]-(tss:ThreatScenarioScore)-[]-(ts:ThreatScenario)
WITH node, tss, ts
ORDER BY ts.name ASC, node.zindex DESC
WITH
ts.name AS name,
collect({
zindex: node.zindex, intention: tss.intention, capability: tss.capability
})[0] AS max
RETURN
name,
max.zindex AS zindex,
max.intention AS intention,
max.capability AS capability
这根据元组对元组进行排序name
(升序),但更重要的是,根据他们zindex
按降序排列。所以当zindex
and tss
属性被收集到一个列表中,第一项(索引[0]
)将保存具有最大值的元素zindex
value.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)