2017-03-22 17 views
1

私は使用しようとしているコードを含めています。私が欲しいのは、各医師のための遭遇IDのカウントを取得することです。私は、少なくとも2回の訪問を受けた患者、または1回の予防的訪問を受けた患者を捕獲したい。私は、このステートメントを使用してこの作業を行う方法を知らない。助けてくれてありがとう。hasステートメントで2つの異なる指標を使用する

SELECT e.doctorID, COUNT(DISTINCT e.encounterID) AS VisitCount 

FROM enc e 

JOIN users u ON e.patientID = u.uid 
Left JOIN diagnosis d ON e.encounterID = d.encounterID 
LEFT JOIN items it ON d.itemID = it.itemID 
LEFT JOIN itemdetail id ON it.itemID = id.itemID 

WHERE e.encType = 1 AND e.status = 'CHK' AND e.deleteFlag = 0 AND 
e.date BETWEEN DATE_ADD((LAST_DAY(DATE_ADD(CURDATE(),INTERVAL -2 MONTH))), INTERVAL 1 DAY) AND LAST_DAY(DATE_ADD(CURDATE(),INTERVAL -1 MONTH)) 
    AND FLOOR(DATEDIFF(NOW(),u.ptdob)/365.25) >= 18 AND e.doctorID = e.resourceID 

     GROUP BY e.doctorID, id.value 
     HAVING 
     COUNT(e.patientid)>=2 OR 
     id.value in ('Z00.00', 'Z00.01') 
+0

あなたの質問が患者に関するものである場合、なぜあなたは「e.doctorID」でグループ化していますか? –

+0

あなたのhaving節でこれを試してください: 'またはsum( 'Z00.00'、 'Z00.01'))> 0'の和。 group by節から 'id.value'を削除します。 –

答えて

0

grp by節にid.valueを含める必要はありません。 id.value節を持つ文節で有効な条件を与えるようにしてください

select e.doctorID, 
COUNT(distinct e.encounterID) as VisitCount from enc e join users u on e.patientID = u.uid 
left join diagnosis d on e.encounterID = d.encounterID left join items it on 
d.itemID = it.itemID left join itemdetail id on 
it.itemID = id.itemID where e.encType = 1 and e.status ='CHK' and e.deleteFlag = 0 and 
 e.date between DATE_ADD((LAST_DAY(DATE_ADD(CURDATE(), INTERVAL - 2 MONTH))), INTERVAL 1 DAY) 
and LAST_DAY(DATE_ADD(CURDATE(), INTERVAL - 1 MONTH)) 
and 
FLOOR(DATEDIFF(NOW(), u.ptdob)/365.25) >= 18 
and e.doctorID = e.resourceID group by e.doctorID 
having COUNT(e.patientid) >= 2 
or sum(case when id.value in ('Z00.00','Z00.01') then 1 
else 0 end)>=1 
+0

ありがとうございます。それは完璧に働いた。 –

関連する問題