首页 > 解决方案 > 在 Neo4j、noSQL 中加入两个表

问题描述

我想解决的查询是:

《来院2年以上的糖尿病患者名单》

有两个表,“PATIENTS_INFO”和“HOSPITAL_INFO”都有一个共同的属性,“PATIENT_ID”

我试过这个查询,但没有用:

MATCH (p:PATIENTS_INFO)->(h:HOSPITAL_INFO) WHERE p.years > 2 AND h.Category = 'Diabetes'RETURN p;

有人可以帮我加入这两个表并解决这个查询吗?

标签: sqlneo4jnosql

解决方案


您的架构需要更多复杂性。您有患者和医院的节点。听起来您至少需要一个额外的节点,例如访问或入场。它可能是带有 ID、日期、访问类型(门诊或住院)和诊断属性的访问。您还需要这些节点之间的边/关系,例如:(p:Patient)-[pv:PatientVisit]-(v:Visit)-[hv:HospVisit]->(h:Hospital)

然后你可以这样查询:

match  (p:Patient{ID:xxx})-[pv:PatientVisit]-(v:Visit)-[:HospVisit]->(h:Hospital) 
 with p where min(v.date)<**** 
 with p,collect(v.ID) as VIDs
match (p:Patient{ID:xxx})-[pv:PatientVisit]-(v:Visit)-[:HospVisit]->(h:Hospital)
 where v.ID in VIDs and v.diagnosis='Diabetes'
return p,v,h

***有几种方法可以处理日期差异,APOC 功能可能是最好的。

初始匹配查找与任何给定医院有两年关系的患者的所有患者就诊,并收集就诊 ID。第二个得到他们所有的访问和这些医院。

如果您只需要患者列表而不是所有详细信息,则可以修改此设置。

您应该考虑使用标准代码集进行诊断,例如 ICD10-CM 或 SNOMED。还有医院标识符,例如 NPI。您可能想查看 AHRQ 入院标准数据集,了解它们如何处理这些数据的复杂性:https ://www.hcup-us.ahrq.gov/nisoverview.jsp


推荐阅读