2017-08-10 37 views
1

返回節點我加載數據通過CSV一起的Neo4j以下命令的Neo4j - 對最大值

load csv with headers from "file:///path_to.csv" as file 
merge (d:DIAGNOSIS {name:file.DIAGNOSIS_SYNONYM}) 
merge (dn:DRUG_NAME {name:file.DRUG_NAME}) 
merge (tc:TOTAL_COST {name:toFloat(file.TOTAL_COST)}) 
merge (cnt:COUNT {name:toInt(file.COUNT)}) 
merge (ac:AVERAGE_COST {name:toFloat(file.AVERAGE_COST)}) 
create (dn)-[:for]->(d) 
create (d)-[:costs]->(tc) 
create (tc)-[:count]->(cnt) 
create (cnt)-[:avg_costs]->(ac) 

現在我想找到最高/最低TOTAL_COST診斷。

我已經試過

MATCH ((dn)-[:for]-(d)-[:costs]-(tc)-[:count]-(cnt)-[:avg_costs]->(ac)) 
WITH d,tc, max(tc.name) as maximum 
where tc.name= maximum 
return d 

然而,這將返回所有診斷節點。有人能告訴我我做錯了什麼嗎?

+0

的可能的複製[如何在收集使用MAX()?](https://stackoverflow.com/questions/36090701/how-to-use-max-on-a-collection) – Liam

回答

1

由於您僅使用d::DIAGNOSIStc:TOTAL_COST爲什麼您要使用整個路徑?我相信你可以MATCH只有(d:DIAGNOSIS)-[:costs]-(tc:TOTAL_COST)而忽略其餘。

還記得儘可能使用標籤。標籤將提高查詢的性能。

我相信,使用ORDER BYLIMIT應該工作。嘗試:

MATCH ((d:DIAGNOSIS)-[:costs]-(tc:TOTAL_COST)) 
RETURN d 
ORDER BY tc.name DESC 
LIMIT 1 

另外,您可以第一場比賽的最大tc.name,並在第二場比賽的WHERE使用它。

MATCH (tc:TOTAL_COST) 
WITH max(tc.name) AS maximum 
MATCH ((d:DIAGNOSIS)-[:costs]-(tc:TOTAL_COST)) 
WHERE tc.name = maximum 
RETURN d 
+1

大。謝謝:)這解決了我的問題:) –