จำนวนคน
SET @start_date = '2024-10-01';SET @end_date = '2024-10-31'; SELECT i.ward, w.NAME AS ward_name, DATE_FORMAT(i.regdate, '%Y-%m') AS admit_month, -- 1. [เปลี่ยน] นับจำนวนผู้ป่วย (HN) ที่ LOS <= 48 ชม. COUNT(DISTINCT CASE WHEN TIMESTAMPDIFF( HOUR, CONCAT(i.regdate, ' ', i.regtime), CONCAT(i.dchdate, ' ', i.dchtime) ) <= 48 THEN i.hn -- เปลี่ยนจาก i.an เป็น i.hn ELSE NULL END) AS total_patients_lte_48h, -- 2. [เปลี่ยน] นับจำนวนผู้ป่วย (HN) ที่ LOS > 48 ชม. COUNT(DISTINCT CASE WHEN TIMESTAMPDIFF( HOUR, CONCAT(i.regdate, ' ', i.regtime), CONCAT(i.dchdate, ' ', i.dchtime) ) > 48 THEN i.hn -- เปลี่ยนจาก i.an เป็น i.hn ELSE NULL END) AS total_patients_gt_48h, -- 3. คำนวณวันนอน (ตามกฎ 6 ชม.) ของกลุ่ม <= 48 ชม. SUM( CASE WHEN TIMESTAMPDIFF( HOUR, CONCAT(i.regdate, ' ', i.regtime), CONCAT(i.dchdate, ' ', i.dchtime) ) <= 48 THEN CASE WHEN DATEDIFF(i.dchdate, i.regdate) = 0 THEN CASE WHEN TIMESTAMPDIFF( HOUR, CONCAT(i.regdate, ' ', i.regtime), CONCAT(i.dchdate, ' ', i.dchtime) ) > 6 THEN 1 ELSE 0 END ELSE DATEDIFF(i.dchdate, i.regdate) END ELSE 0 END ) AS total_los_days_lte_48h, -- 4. คำนวณวันนอน (ตามกฎ 6 ชม.) ของกลุ่ม > 48 ชม. SUM( CASE WHEN TIMESTAMPDIFF( HOUR, CONCAT(i.regdate, ' ', i.regtime), CONCAT(i.dchdate, ' ', i.dchtime) ) > 48 THEN CASE WHEN DATEDIFF(i.dchdate, i.regdate) = 0 THEN CASE WHEN TIMESTAMPDIFF( HOUR, CONCAT(i.regdate, ' ', i.regtime), CONCAT(i.dchdate, ' ', i.dchtime) ) > 6 THEN 1 ELSE 0 END ELSE DATEDIFF(i.dchdate, i.regdate) END ELSE 0 END ) AS total_los_days_gt_48h, -- 5. นับจำนวน HN ที่ไม่ซ้ำกันทั้งหมด (จำนวนผู้ป่วย) COUNT(DISTINCT i.hn) AS total_unique_patients FROM ipt iLEFT JOIN ward w ON i.ward = w.wardWHERE i.dchdate IS NOT NULL AND i.regdate BETWEEN @start_date AND @end_dateGROUP BY i.ward, w.NAME, admit_monthORDER BY i.ward, admit_month;
จำนวนครั้ง
SET @start_date = '2024-10-01';SET @end_date = '2024-10-31'; SELECT i.ward, w.NAME AS ward_name, DATE_FORMAT(i.regdate, '%Y-%m') AS admit_month, -- 1. นับจำนวน visit (AN) ที่ LOS <= 48 ชม. COUNT(DISTINCT CASE WHEN TIMESTAMPDIFF( HOUR, CONCAT(i.regdate, ' ', i.regtime), CONCAT(i.dchdate, ' ', i.dchtime) ) <= 48 THEN i.an ELSE NULL END) AS total_visits_lte_48h, -- 2. นับจำนวน visit (AN) ที่ LOS > 48 ชม. COUNT(DISTINCT CASE WHEN TIMESTAMPDIFF( HOUR, CONCAT(i.regdate, ' ', i.regtime), CONCAT(i.dchdate, ' ', i.dchtime) ) > 48 THEN i.an ELSE NULL END) AS total_visits_gt_48h, -- 3. คำนวณวันนอน (ตามกฎ 6 ชม.) ของกลุ่ม <= 48 ชม. SUM( CASE -- เงื่อนไขคือ ต้องเป็นเคส <= 48 ชม. เท่านั้น WHEN TIMESTAMPDIFF( HOUR, CONCAT(i.regdate, ' ', i.regtime), CONCAT(i.dchdate, ' ', i.dchtime) ) <= 48 THEN -- Logic การคำนวณวันนอน (6 ชม. = 1 วัน) CASE WHEN DATEDIFF(i.dchdate, i.regdate) = 0 THEN -- D/C วันเดียวกับ Admit CASE WHEN TIMESTAMPDIFF( HOUR, CONCAT(i.regdate, ' ', i.regtime), CONCAT(i.dchdate, ' ', i.dchtime) ) > 6 THEN 1 ELSE 0 END ELSE DATEDIFF(i.dchdate, i.regdate) -- D/C คนละวัน END ELSE 0 -- ไม่เข้าเงื่อนไข 48 ชม. ให้นับเป็น 0 END ) AS total_los_days_lte_48h, -- 4. คำนวณวันนอน (ตามกฎ 6 ชม.) ของกลุ่ม > 48 ชม. SUM( CASE -- เงื่อนไขคือ ต้องเป็นเคส > 48 ชม. เท่านั้น WHEN TIMESTAMPDIFF( HOUR, CONCAT(i.regdate, ' ', i.regtime), CONCAT(i.dchdate, ' ', i.dchtime) ) > 48 THEN -- Logic การคำนวณวันนอน (6 ชม. = 1 วัน) CASE WHEN DATEDIFF(i.dchdate, i.regdate) = 0 THEN -- D/C วันเดียวกับ Admit CASE WHEN TIMESTAMPDIFF( HOUR, CONCAT(i.regdate, ' ', i.regtime), CONCAT(i.dchdate, ' ', i.dchtime) ) > 6 THEN 1 ELSE 0 END ELSE DATEDIFF(i.dchdate, i.regdate) -- D/C คนละวัน END ELSE 0 -- ไม่เข้าเงื่อนไข > 48 ชม. ให้นับเป็น 0 END ) AS total_los_days_gt_48h, -- 5. [ที่เปลี่ยน] นับจำนวน AN ที่ไม่ซ้ำกันทั้งหมด (จำนวนการ Admit) COUNT(DISTINCT i.an) AS total_all_visits FROM ipt iLEFT JOIN ward w ON i.ward = w.wardWHERE i.dchdate IS NOT NULL AND i.regdate BETWEEN @start_date AND @end_dateGROUP BY i.ward, w.NAME, admit_monthORDER BY i.ward, admit_month;