我有这个 SQL 查询:
SELECT
t1.patient_id,
CONVERT(aes_decrypt(t4.patient_name_en, 'k') USING utf8mb4) as patient_name_en,
min(t3.date_of_visit) as date_of_visit,
t2.diagnosis_name,
max(ifnull(t5.date_of_assessment, 'N/A')) as date_of_assessment,
ifnull(t5.assessment_result, 0) as assessment_result,
(SELECT
CASE
WHEN
(period_diff(EXTRACT(YEAR_MONTH FROM now()), EXTRACT(YEAR_MONTH FROM date_of_assessment))>=6)
THEN
'Yes'
ELSE
'No'
END
FROM
diabetes_assessment t5
where t5.patient_id = t1.patient_id LIMIT 1) as assessment_needed
FROM
consultation t1
LEFT JOIN diagnosis t2
ON t1.diagnosis_id = t2.diagnosis_id
LEFT JOIN visit t3
ON t3.visit_id = t1.visit_id
LEFT JOIN patient t4
ON t4.patient_id = t3.patient_id
LEFT JOIN diabetes_assessment t5
ON t5.patient_id = t4.patient_id
WHERE t2.diagnosis_name
LIKE '%Diabetes%'
AND
t1.clinic_id = '361'
AND
t3.visit_status='Active'
GROUP BY
t1.patient_id
ORDER BY
t5.date_of_assessment DESC
我需要在哪里选择不同的列,其中最多的是date_of_assessment
,assessment_result
和case
结果。
这三个重要领域的结果存在问题。正如您在这一行中看到的:
| 361-9001 | (null) | 2017-03-03 | Diabetes mellitus with diabetic nephropathy | 2017-05-05 | 31 | No |
选择的日期是为患者完成的最后评估日期,但该特定日期的评估结果是 40 和 31。因此查询返回正确的字段,但它只是选择具有任意评估结果的最后日期,即与该日期无关。
这是评估表的数据:
insert into diabetes_assessment values (1, '361-9001', 361, '2017-04-04', 31);
insert into diabetes_assessment values (2, '361-9001', 361, '2017-05-05', 40);
insert into diabetes_assessment values (3, '361-0361', 361, '2017-03-10', 30.5);
所以结果应该取自这一行:
插入糖尿病评估值(2,'361-9001',361,'2017-05-05',40);
我试图添加max()
到assessment_result,但它仍然给出错误的未连接数据。