2014-12-02 1 views
0

나는 p1 : Encounter와 같은 ICD9DX 코드를 가진 모든 만남 (p2)을 반환하고 싶습니다. 그래서 p1이 3 개의 ICD9DX 코드를 가지고 있다면, 같은 3 개의 코드를 가진 p2 노드를 찾고 싶습니다. 궁극적으로 나는 에만이 동일한 3 개의 코드를 가지고 있고 그것을 쓰는 방법이 적어도 그 그 3 개의 코드를 가지고있는 것들을 돌려 줄 수 있도록 p2 노드를 리턴 할 수 있도록 쿼리를 작성하는 방법을 알고 싶습니다. 나는 답을 얻었지만 지금까지 성공하지 못했던 다른 질문에서 이것을 찾아 내려고 노력했다. 아래는 최신 반복입니다.일치하는 모든 연결에서 노드를 어떻게 일치시킬 수 있습니까?

MATCH path=((p1:Encounter {PatientAccount: '1003149560'})-[:HasICD9Dx]-(i:ICD9DX)-[:HasICD9Dx]-(p2:Encounter)) 
WHERE ALL(p1 in tail(nodes(path)) WHERE()-[:HasICD9Dx]->p1) 
RETURN p2 

저는 Neo4j의 새로운 제품이므로 논리에 대한 설명이 도움이 될 것입니다. WITH를 사용하여 유사한 주제에 접근하는 다른 게시물을 보았습니다. 그러나 WITH 절을 이해하는 데 어려움을 겪고 있습니다. 어쩌면 나는 매뉴얼을 파고 읽을 필요가있을 것이다.

+0

는 특히 3 코드에 대한 중요한 아무것도 없다 아니면 몇 가지 코드를 의미합니까? – FrobberOfBits

+0

두 가지 질문을하는 질문을 볼 수 있습니다. (1) 만남이 똑같은 코드와 더 이상없고 (2) 만남이 적어도이 코드를가집니다. 나는 내가 그것을 이해했다고 생각한다. 나는 도착한 답을 알려줄 것입니다. –

+1

WITH 절 : RETURN과 비슷하지만, 하나의 쿼리 파트에서 다른 쿼리 파트로 데이터를 전송하면, 전송 한 것만 볼 수 있고 RETURN과 마찬가지로 프로젝션, 집계, 필터링, 정렬을 수행 할 수 있습니다. –

답변

1

마침내 알아 냈습니다 (보이는 것처럼 보입니다). 적어도 P1에 관련된 코드를 일치 만남을 반환하려면

MATCH (p1:Encounter {PatientAccount: '1002844934'})-[:HasICD9Dx]-(i:ICD9DX) 
WITH COUNT(i) AS codes, p1 
MATCH (p2:Encounter)-[:HasICD9Dx]-(i:ICD9DX)-[:HasICD9Dx]-(p1) 
WITH count(i) as foundCodes, codes, p2 
WHERE foundCodes = codes 
MATCH (p2)-[:HasICD9Dx]-(i:ICD9DX) 
WITH count(i) as totalCodes, codes, p2 
RETURN p2.PatientAccount, totalCodes 

는 P1과 동일한 코드가 만남을 반환하려면 더 이상 :

MATCH (p1:Encounter {PatientAccount: '1002844934'})-[:HasICD9Dx]-(i:ICD9DX) 
WITH COUNT(i) AS codes, p1 
MATCH (p2:Encounter)-[:HasICD9Dx]-(i:ICD9DX)-[:HasICD9Dx]-(p1) 
WITH count(i) as foundCodes, codes, p2 
WHERE foundCodes = codes 
MATCH (p2)-[:HasICD9Dx]-(i:ICD9DX) 
WITH count(i) as totalCodes, codes, p2 
WHERE totalCodes = codes 
RETURN p2.PatientAccount 
관련 문제