จากคำตอบทั้ง 2 นั้น สามารถเขียนให้สั้นได้โดยอ้างอิงเฉพาะตาราง ovstdiag ก็ได้ เพราะ hn,vn,vstdate ที่เราต้องใช้ มีอยู่ใน ovstdiag แล้ว
แต่ผมพบว่าข้อมูลของผมบาง record ใน ovstdiag มี vstdate เป็น 01/01/2443 ซึ่งก็คือไม่มีค่านั่นเอง ทำให้ดึงข้อมูลออกมาไม่ครบ ... อันนี้ไม่ทราบว่าเป็นเพราะอะไร vstdate จาก ovst จึงไม่ไป update ใน ovstdiag (เดี๋ยวต้องสั่งเองซะแล้ว...
)
แต่ถ้าข้อมูล vstdate ใน ovstdiag ไม่มีปัญหา เราสามารถเขียน sql ให้สั้นลงได้
select t2.hn from
(select t1.hn, count(t1.vn) as times from
(select o2.vn,o2.hn,o2.vstdate,o2.icd10
from ovstdiag o2
where (o2.vstdate between "2010-01-01" and "2010-01-31") and ((o2.icd10 between "E10" and "E14") or (o2.icd10="I10"))) as t1
group by t1.vn
having count(t1.vn) = 2) as t2
group by t2.hn
สั้นลงไปอีกนิด คือไม่ต้องไป join กับ ovst เท่านั้นเอง