2017-09-25 3 views
1

2 개의 필드에서 distinct distinct 쿼리의 결과를 반환해야합니다. 이 쿼리 작업 아니라 내가 필요합니까 : 동일한 쿼리에서 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

감사합니다! 그 매핑 기술은 제가 놓친 것입니다. –