我有这个未回答的问题,我有这个错误的结果查询:
SELECT
t1.patient_id,
CONVERT(aes_decrypt(t4.patient_name_en, :encKey) 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
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 :diagName AND
t1.clinic_id = :cid AND
t3.visit_status=:visit_status
GROUP BY
t1.patient_id,
t2.diagnosis_name,
t3.date_of_visit
t4.patient_name_en,
t5.date_of_assessment
t5.assessment_result
ORDER BY t5.date_of_assessment DESC
这给了我这个结果:
新事物是我尝试使用子查询循环以下查询patient_id
:
SELECT t1.patient_id,
CONVERT(aes_decrypt(t4.patient_name_en, 'key1') 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
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 t1.patient_id IN
(SELECT t1.patient_id
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) AND
t2.diagnosis_name LIKE '%Diabetes%' AND t1.clinic_id = '361'
AND t3.visit_status="Active"
GROUP BY t1.patient_id, t5.date_of_assessment, t4.patient_name_en, t3.date_of_visit, t2.diagnosis_name, t5.assessment_result
ORDER BY t5.date_of_assessment DESC
我得到了与上图相同的结果。
我真正想要的是只显示以下两行,这意味着 group by patient_id
。
由于某些原因,我无法禁用该only_full_group_by
模式,因为我阅读它可能会给出一些错误的结果。
我试图只patient_id
在小提琴中分组,显然它可以正常工作,因为小提琴有only_full_group_by
残疾人。
我应该怎么办 ?
- 创建一个 PHP 解决方案,我将查询分成 2 个,第一个是子查询,我将在其中获取 ID,然后使用外部查询 a
foreach
使用 LIMIT 1 为每个 ID 获取一行? - 或者禁用
only_full_group_by mode
哪个会影响我的应用程序中不同方面的其他查询? - 创建一个 sql 存储过程而不是解决方案 #1 ?