【发布时间】:2018-09-21 05:14:41
【问题描述】:
我有以下查询,我最终将使用 205 个患者 ID:
select
patient_id
FROM
visit
WHERE
month(visit.date_of_visit)=3
AND
year(visit.date_of_visit)=2018
AND
visit.visit_status='Active'
GROUP BY patient_id
我想获取所有 205 个 ID 并将它们运行到其他查询中,以查看我们有多少疾病,如心血管疾病和呼吸系统疾病。
我的数据库结构如下:
我想要的是获得每个患者的 ID,他们仅在第一次去医院时就被诊断出来(所以在这里我们将使用 min(visit.date_of_visit))
`diagnosis_name LIKE '%Cardio%' 的期望结果:
例如>:
患者:150(或其他)
并且查询被改变以获取呼吸信息。
对于我使用 select from select 的心脏病,我尝试了以下方法:
SELECT count(*)
FROM
(
select
min(visit.date_of_visit), visit_id, patient_id, count(*) as patientId
FROM
visit
WHERE
month(visit.date_of_visit)=3
AND
year(visit.date_of_visit)=2018
AND
visit.visit_status='Active'
GROUP BY patient_id
) as vid
LEFT JOIN
consultation ON consultation.visit_id=vid.visit_id
LEFT JOIN
diagnosis ON diagnosis.diagnosis_id=consultation.diagnosis_id
WHERE diagnosis.diagnosis_name LIKE '%Cardio%'
结果是:5,这是一个错误的数字。
这可以通过 PHP 和 MYSQL 一起轻松完成,但这会通过重复相同的查询 205 次并增加一个计数器来耗尽服务器。所以想要的结果应该只用 MySQL 来完成。
数据示例:
访问表
visit_id=1; date_of_visit=2018-03-03; visit_reason=活动; ...; 患者id=1234;
visit_id=2; date_of_visit=2018-03-04; visit_reason=活动; ...; 患者id=1239;
visit_id= 3; date_of_visit=2018-03-07; visit_reason=活动; ...; 患者id=1234;
咨询表
consultation_id=1; ...;诊断ID=12;访问id=1;...;
consultation_id=2; ...;诊断ID=12; visit_id=2;...;
诊断表
diagnosis_id=12;诊断名称:高血压(心脏病);
diagnosis_id=13;诊断名称:肾病
通过运行查询来查看来医院并在初次就诊时被诊断为患有心脏病的患者,结果应该在示例中为 2,您可以从Patient_id=1234 有 2 次访问的示例,但我需要知道他在第一次访问时有什么。
【问题讨论】:
-
您想在您的问题中添加示例数据(作为文本)吗?
-
是的。请给我几分钟。
-
以及基于示例数据的预期输出(作为文本)。
-
完成。您可以查看示例。
-
格式错误的示例数据将花费我们很多时间来处理.. 你能把它变成一个基于 ascii 的数据吗 -> ozh.github.io/ascii-tables 你让它基于 ascii 我们可以简单地使用 sqlfiddle.com ascii 导入器生成创建和插入语句...或使用 mysql-workbench 导出功能从您的数据生成 CSV -> dev.mysql.com/doc/workbench/en/…
标签: mysql sql mysql-workbench