mysql - 从数据库读取数据的示例 OpenMRS MySQL 查询

标签 mysql openmrs

我在肯尼亚基苏木的一家医院本地实现了 openmrs 版本 1.9.7。由于 OpenMrs 数据库的复杂性,当我尝试编写查询来访问从数据库收集的患者数据以进行数据管理时,问题就出现了。我对 sql 也有点陌生,因为我已经有一段时间没有练习了,但我需要尽快输出数据。 我目前的查询如下

  SELECT p.date_created as date_enrolled, pi.identifier,     pi.identifier_type     identifier_type ,
 pn.given_name,pn.middle_name, pn.family_name, p.person_id, p.gender, p.birthdate, p.death_date,  
ob.obs_datetime, cm.name as obs_type, CASE co.datatype_id    when '1' then ob.value_numeric   
when '2' then  (select name from concept_name where concept_id = ob.value_coded limit 1)   
 when '3' then ob.value_text    when '6' then ob.value_datetime    when '10' then ob.value_boolean    when '13' then ob.value_complex else "N/A" END AS obs_value, e.encounter_datetime 
FROM person p JOIN person_name pn ON p.person_id = pn.person_id
JOIN patient_identifier pi ON p.person_id = pi.patient_id 
JOIN patient_identifier_type pit ON pit.patient_identifier_type_id = pi.identifier_type 
JOIN obs ob ON p.person_id = ob.person_id JOIN encounter e ON e.encounter_id = ob.encounter_id 
JOIN concept_name cm ON ob.concept_id = cm.concept_id
JOIN concept co ON ob.concept_id = co.concept_id
JOIN concept_datatype cdt ON cdt.concept_datatype_id = co.datatype_id;

是否有一个已经存在的查询可供我用作起始查询,并且可以进行修改以满足我的需求? 或者更确切地说,你对我如何度过这个过程有什么最好的建议?

谢谢

最佳答案

考虑到涉及的所有表格,您做得非常好。这是非常复杂的 SQL,因为您将标题和详细数据混合在一行中。如果您想在单个查询中编写一些内容,那么这里有两个相当大的问题:1)concept_name 有多种语言环境(语言),而我怀疑您只需要一种语言。尝试使用 locale='en' 之类的方法来减少行数。 2)obs表是EAV(实体-属性-值),加上你发现的,不同的值字段对应不同的数据类型。要处理这个问题,请看一下 MySql 的 GROUP_CONCAT 函数。这是执行查询的粗略镜头,尽管我删除了一些内容以简化并使其正常工作。它会让您了解如何使用 GROUP_CONCAT,但我把赌注放在了数据类型 -> 值 CASE 语句上:

SELECT p.date_created as date_enrolled, 
pi.identifier, pi.identifier_type, pn.given_name,  
left(GROUP_CONCAT(ob.obs_datetime, cm.name SEPARATOR '\t'),60) as 'ItemDate|ItemName', 
e.encounter_datetime 
FROM person p JOIN person_name pn ON p.person_id = pn.person_id
JOIN patient_identifier pi ON p.person_id = pi.patient_id 
JOIN patient_identifier_type pit ON pit.patient_identifier_type_id = pi.identifier_type 
JOIN obs ob ON p.person_id = ob.person_id 
JOIN encounter e ON e.encounter_id = ob.encounter_id 
JOIN concept_name cm ON ob.concept_id = cm.concept_id
JOIN concept co ON ob.concept_id = co.concept_id
JOIN concept_datatype cdt ON cdt.concept_datatype_id = co.datatype_id 
where cm.locale = 'en'
group by 2 limit 10;

尽管如此,我认为 OpenMRS 人员不会建议您继续尝试此操作。请改用他们的报告工具。

关于mysql - 从数据库读取数据的示例 OpenMRS MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35623907/

相关文章:

mysql - 如何删除alembic上没有名称的外键的外键约束?

mysql - 服务器快照可能会损坏 MySQL 事务吗?

python - mysql django 的 NULL 和 FALSE 是否相同?

java - 创建外键的语法错误

php - 在 PHP/HTML 中格式化 MySQL 查询

ubuntu - 即使在增加堆大小后,Tomcat7 也会出现内存不足错误

java - SonarQube:结果未显示