我有以下查询,我将最终获得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并将其运行到其他查询中,以查看我们有多少种疾病,如心血管疾病,然后是呼吸系统疾病。
我的数据库结构如下:
我想要的是获取每位患者的身份证明,他们在首次就诊时诊断出来的情况(所以我们将在这里与min(visit.date_of_visit)
合作)
`diagn_name LIKE'%Cardio%'
的理想结果E.g>:
患者:150(或某事)
更改查询以获取呼吸信息。
我尝试使用以下选择的心脏病:
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年3月3日; visit_reason =活动; ...; patient_id = 1234;
visit_id = 2; date_of_visit = 2018年3月4日; visit_reason =活动; ...; patient_id = 1239;
visit_id = 3; date_of_visit = 2018年3月7日; visit_reason =活动; ...; patient_id = 1234;
咨询表
consultation_id = 1; ...; diagnosis_id = 12; visit_id = 1; ...;
consultation_id = 2; ...; diagnosis_id = 12; visit_id = 2; ...;
诊断表
diagnosis_id = 12;诊断名称:高血压(心脏病);
diagnosis_id = 13;诊断名称:肾脏疾病
通过运行查询来查看来到医院的患者以及他们在初次就诊时被诊断为患有心脏病的患者,结果应该在示例中为 2 ,如您所见patient_id = 1234有2次访问的例子,但我需要知道他在第一次访问时有什么。
答案 0 :(得分:0)
BRO,它工作正常。现在就在实时场景中进行测试。
SELECT count(*)
FROM
(
select
min(visit.date_of_visit) first_date, 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
INNER JOIN visit b ON
B.patient_id = vid.patient_id AND
B.date_of_visit = vid.first_date and
month(B.date_of_visit)=3 AND
year(B.date_of_visit)=2018 AND
B.visit_reason='Active'
INNER JOIN consultation ON
consultation.visit_id = B.visit_id
INNER JOIN diagnosis ON
diagnosis.diagnosis_id = consultation.diagnosis_id AND
diagnosis.diagnosis_name LIKE '%Cardio%'
答案 1 :(得分:0)
您可以在MySQL 8+中使用窗口函数。但在旧版本中,您需要以其他方式计算值。
你的问题就是你在想:
SELECT COUNT(*) as num_diagnoses, COUNT(DISTINCT patient_id) as num_patients
FROM visit v JOIN
(SELECT patient_id,
MIN(v.date_of_visit) as min_dov
FROM visit v
WHERE v.date_of_visit >= '2018-03-01' AND
v.date_of_visit < '2018-04-01' AND
v.visit_status = 'Active'
) vf
ON v.patient_id = vf.patient_id AND v.date_of_visit = vf.min_dov JOIN
consultation c
ON c.visit_id = v.visit_id JOIN
diagnosis d
ON d.diagnosis_id = c.diagnosis_id
WHERE d.diagnosis_name LIKE '%Cardio%';
使用日期时,最好将列值直接与日期进行比较,而不是将其分解。