У меня есть график с пространственными данными с использованием пространственного плагина.
На этом графике есть «зоны угрозы» (полигоны), которые могут располагаться друг над другом, поэтому у них также есть свойство 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
и tss.capability
. Поскольку их значения различаются между зонами, функция max рассматривает их как разные записи.
Есть ли лучший способ использовать функцию max, чтобы получить то, что я хочу, и/или использовать вложенный запрос для извлечения намерения/возможности (что мне и нужно)?