表字段:patient_id,result_id,result_value
Result_ID是:
查询示例:
Select from lab_observation LO
where LO.result_id in (19,20,11379,11515,12134,11408,13731)
结果:
patient_id result_id label value
123 19 BP Systolic 120
123 20 BP Diastolic 80
123 11379 LDL 1.2
123 11408 A1C 7.1
456 19 BP Systolic 120
456 20 BP Diastolic 80
但是,当我将查询更改为:
时,我只想看病人123Select * from lab_observation LO
where LO.result_id in (19,20) and LO.result_id in(11379,11515,12134)
and LO.results_id in (11408,13731)
它不会使患者返回123.
以下是所需的表格。
表:
Lab_observation:
observation_value label result_id group_id
140 BP-Systolic 19 1067613
90 BP-Diastolic 20 1067613
.071 A1C 11408 1067613
2.2 LDL 11515 1067613
.08 A1C 11408 1142318
Lab_observation_group:
group_id patient_id
1067613 123
1142318 456
1042258 123
*** group_id是唯一的。 Patient_id在此表中确实有多个group_id。现在我想到了我真正想要的是具有全部四个结果的group_ids。
我尝试了这个,但它不起作用:
SELECT a.*
FROM lab_observation_group a
JOIN ( SELECT group_id
FROM lab_observation LO
GROUP BY group_id
HAVING MAX(CASE WHEN LO.result_id in (19,20) THEN 1 END) = 1
AND MAX(CASE WHEN LO.result_id in (11379,11515,12134) THEN 1
END)=1
AND MAX(CASE WHEN LO.result_id in (11408,13731) THEN 1 END) = 1
)b
ON a.group_id = b.group_id
没有结果,但我认为这接近我的需要。再次感谢大家的帮助。
答案 0 :(得分:0)
如果您想要在多行中要求满足一组条件,则需要使用聚合,我不知道水晶报告语法,但您可能会在HAVING
中使用条件聚合子句:
SELECT patient_id
FROM lab_observation LO
GROUP BY patient_id
HAVING MAX(CASE WHEN LO.result_id in (19,20) THEN 1 END) = 1
AND MAX(CASE WHEN LO.result_id in (11379,11515,12134) THEN 1 END) = 1
AND MAX(CASE WHEN LO.result_id in (11408,13731) THEN 1 END) = 1
这将为您提供符合此条件的patient_id
值,您可以在子查询中使用它来获取这些患者的完整记录:
SELECT a.*
FROM lab_observation a
JOIN ( SELECT patient_id
FROM lab_observation LO
GROUP BY patient_id
HAVING MAX(CASE WHEN LO.result_id in (19,20) THEN 1 END) = 1
AND MAX(CASE WHEN LO.result_id in (11379,11515,12134) THEN 1 END) = 1
AND MAX(CASE WHEN LO.result_id in (11408,13731) THEN 1 END) = 1
)b
ON a.patient_id = b.patient_id
答案 1 :(得分:0)
你的WHERE中有一个不可能的条件。让我们简化一下,告诉你哪里出错了。
Select * from lab_observation LO
where LO.result_id in (19) and LO.result_id in (11379)
基本上,上面的查询与
相同Select * from lab_observation LO
where LO.result_id = 19 and LO.result_id = 11379
这永远不会返回任何行。 WHERE条件是逐行评估的。一行的结果id不可能与这两个数字相等。
如果您要在第一个查询和患者123中过滤包含这些结果ID的记录,那么这就是您过滤的内容。
Select from lab_observation LO
where LO.result_id in (19,20,11379,11515,12134,11408,13731)
and LO.patient_id = 123