2017-09-25 77 views
1

我需要在2個字段中返回不同查詢的結果。 此查詢的工作很好,做什麼,我需要:在同一查詢中返回distinct + max

match(a:Assembly) 
where a.SourceLocation = "" 
match (a)<-[r:REFERENCES{Type: "DLL"}]-(b:Assembly) 
return distinct a.Name,r.HintPath 

現在我需要另一個字段添加到結果。因爲它是一個集合,我簡單地返回最大入口

match(a:Assembly) 
where a.SourceLocation = "" 
match (a)<-[r:REFERENCES{Type: "DLL"}]-(b:Assembly) 
return distinct (a.Name,r.HintPath),max(b.SourceLocation) 

現在,上面的代碼不工作(語法錯誤)。 換句話說,我需要選擇不同的(或通過sql中的組合)前兩個字段的組合,以及第三個字段的最大條目。

Cypher中的等效物是什麼?

+0

請添加示例數據集和預期結果。謝謝! –

回答

1

在Cypher中,您可以使用WITH -> ORDER BY -> COLLECT()[0]來獲得列的最大值。您也可以使用{key1:value1, key2:value2}映射語法將值收集到映射中。以下是使用上述語法的查詢。

match(a:Assembly) 
where a.SourceLocation = "" 
match (a)<-[r:REFERENCES{Type: "DLL"}]-(b:Assembly) 
with a, r, b 
ORDER BY b.SourceLocation DESC 
return distinct {Name: a.Name,Hint: r.HintPath} as source, COLLECT(b.SourceLocation)[0] as location 
+0

謝謝!那種映射技術就是我所缺少的。 –