query ncd พี่เอ็ง
SET @startdate = '2025-01-01';SET @enddate = CURDATE();-- ถ้าต้องการเลือกเฉพาะบางห้องตรวจ ใส่ depcode ตรงนี้SET @depcode := '063';-- เว้นว่าง = ทุกห้อง / เช่น '001' = ห้องตรวจอายุรกรรมSELECT a.oapp_id, a.hn, CONCAT( p.pname, ' ', p.fname, ' ', p.lname ) AS pt_name, kd.department AS clinic, -- ห้องตรวจ/คลินิก a.nextdate AS appoint_date, -- วันที่มาล่วงหน้าในช่วง 1–14 วันก่อนวันนัด ( SELECT MAX(o2.vstdate) FROM ovst o2 WHERE o2.hn = a.hn AND o2.vstdate BETWEEN DATE_SUB(a.nextdate, INTERVAL 14 DAY) AND DATE_SUB(a.nextdate, INTERVAL 1 DAY) ) AS early_visit_date, CASEWHEN ( SELECT COUNT(*) FROM ovst o2 WHERE o2.hn = a.hn AND o2.vstdate BETWEEN DATE_SUB(a.nextdate, INTERVAL 14 DAY) AND DATE_SUB(a.nextdate, INTERVAL 1 DAY)) > 0 THEN 'came_early_within_14d'ELSE 'no_show'END AS status_flag, d. NAME AS doctor_nameFROM oapp aJOIN patient p ON p.hn = a.hnLEFT JOIN kskdepartment kd ON kd.depcode = a.depcodeLEFT JOIN doctor d ON d. CODE = a.doctorWHERE a.nextdate BETWEEN @startdateAND @enddate -- ถ้า @depcode มีค่า → เลือกเฉพาะห้องนั้นAND ( @depcode = '' OR a.depcode = @depcode) -- กรองไม่มาตามนัดจริง ๆAND NOT EXISTS ( SELECT 1 FROM ovst o3 WHERE o3.hn = a.hn AND o3.vstdate = a.nextdate)ORDER BY a.nextdate, a.hn;