2016-10-12 5 views
0

У меня есть 3 узла Customer, Phone, ID_Card.Агрегирование свойств отношений между двумя связанными узлами в пути и возврат нового отношения с агрегированными свойствами

ниже мой высчитывать запрос:

match p=((ph: Phone {Phone_ID : "3851308.0"})-[r:Customer_Send | Customer_used_ID | Customer_used_Phone *1..5]-(n2)) with p as p UNWIND relationships(p) as aaa return distinct aaa 

Из-за этого большая связная сеть Phone_ID 3851308.0.

Все отношения в пути (р) обладают свойствами как TXN_KEY, Send_Time, Pay_Time, сумма

Теперь, что мне нужно найти способ, чтобы агрегировать на свойства отношений между 2 смежными узлами в пути (р) и вернуть новое отношение, которое имеет эти агрегированные свойства.

Например, рассмотрим пример: Клиент «1000000000109533119» использовал свой ID «10165649.0» 4 раза для 4 различных транзакций. Таким образом, будут существовать 4 разных отношения Customer_used_ID со свойствами, такими как TXN_KEY, Send_Time, Pay_Time, Amount. Однако я хочу вернуть только одно отношение со всеми свойствами, агрегированными как Count (Txn_Key), Min (Send_time), Min (pay_Time), Sum (Amount).

Итак, я хочу сделать то же самое для каждых 2 подключенных узлов в пути (p).

ответ

0

Ниже Cypher запрос, который делает работу:

MATCH p = (c:Customer {Galactic_ID : "1000000000275162734"}) - [r:Customer_Send|:Customer_used_ID|:Customer_used_Phone*1..5] -() 
WITH distinct(p) as p,[node IN NODES(p) WHERE node:Customer] AS customer_nodes 
UNWIND customer_nodes AS c_node 
MATCH (c_node) - [r1:Customer_at_Agent] -() 
Unwind relationships(p) as rr with r1,rr, Collect(distinct(rr)) + Collect(distinct(r1)) as r2 with r2 as r2 Unwind r2 as r3 
return startnode(r3),endnode(r3),SUM(r3.Amount),MIN(r3.PayTime),MIN(r3.SendTime),COUNT(TXN_KEY) 
Смежные вопросы