BMS-HOSxP Community
HOSxP => Report Exchange => ข้อความที่เริ่มโดย: Neo ที่ กรกฎาคม 30, 2009, 11:41:02 AM
-
ผมกำลังจะหาจำนวนผู้ป่วยทั้งหมดในเดือน ซึ่งมีสูตรอยู่ว่า จำนวนผู้ป่วยยกมาจากเดือนก่อน + ผู้ป่วยรับใหม่ในเดือน ครับ
1. คำสั่ง ผู้ป่วยรับในเดือนผมเขียนได้ดังนี้ (อันนี้ไม่มีปัญหา)
select count(a.an) from an_stat a
where a.regdate between '2009-06-01' and '2009-06-30' and a.ward='01'
2.คำสั่ง จำนวนผู้ป่วยยกมาจากเดือนก่อน (อันนี้มีปัญหาครับ) คิดช่วยหน่อยครับ
select * from an_stat a
where a.regdate <= Date_Add('2009-06-01',interval -1 day) and a.dchdate between '2009-06-01' and '2009-06-30' and a.ward='01'
ปัญหาคือ ถ้า นาย ก admit วันที่ 2009-05-29 แต่ไป dischar ในเดือน 2009-07-02 มันจะไม่นับยอดให้ในเดือน 2009-06 ครับ ผมต้องเขียนอะไรเพิ่มอีกครับ
ช่วยผมคิดหน่อยครับ ??? ??? ???
-
ลองแบบนี้ดูครับ
select * from an_stat a
where a.regdate <'2009-06-01' and a.dchdate between '2009-06-01' and '2009-06-30' and a.ward='01'
-
... ถ้าท่าน Neo ต้องการหาจำนวนผู้ป่วยทั้งหมดในเดือน สมมุติ เดือนมิถุนายน น่าจะลองใช้เงื่อนไขการดูจาก
1. ต้องมีวัันที่รับเข้าตั้งแต่ 30 มิถุนายน ลงมา และ
2. ต้องมีวันที่ถูกจำหน่ายตั้งแต่ 1 มิถุนายน ขึ้นไปรวมกับผู้ที่ยังไม่มีข้อมูลวันที่จำหน่าย(ยัง Admit อยู่)
select * from an_stat
where regdate <= '2009-06-30'
and (dchdate >= '2009-06-01' or dchdate is null)
หรือถ้าจะดูเฉพาะคนไข้ที่ ยกมาจากเดือนก่อน อย่างเดียวก็ลอง
select * from an_stat
where regdate < '2009-06-01'
and (dchdate >= '2009-06-01' or dchdate is null)
-
อ.ขวดครับ ตัว Report ตามที่ได้แนบมาข้างล่างครับ ข้อ 1 จำนวนผู้ป่วยทั้งหมดในเดือน ครับ ที่มี โค๊ตผมแก้ไขตามที่ผมโพสต์ไว้ อ.ขวดช่วยแก้โค๊ตให้หน่อยครับ ตามปัญหา นี้
2.คำสั่ง จำนวนผู้ป่วยยกมาจากเดือนก่อน (อันนี้มีปัญหาครับ) คิดช่วยหน่อยครับ
select * from an_stat a
where a.regdate <= Date_Add('2009-06-01',interval -1 day) and a.dchdate between '2009-06-01' and '2009-06-30' and a.ward='01'
ปัญหาคือ ถ้า นาย ก admit วันที่ 2009-05-29 แต่ไป dischar ในเดือน 2009-07-02 มันจะไม่นับยอดให้ในเดือน 2009-06 ครับ ผมต้องเขียนอะไรเพิ่มอีกครับ
ขอบคุณมากครับ อ.ขวด หรือ อ.ท่านอื่นๆๆๆๆ
-
.... ผมจะดูให้ได้ต้องเป็นช่วงเย็น นะครับ ตอนนี้ อบรม ESB อยู่น่ะครับ ใช้ netbook อยู่ครับ ตอนนี้ไม่มีฐานข้อมูลให้ทดสอบครับ ... :D ....
-
.... ผมจะดูให้ได้ต้องเป็นช่วงเย็น นะครับ ตอนนี้ อบรม ESB อยู่น่ะครับ ใช้ netbook อยู่ครับ ตอนนี้ไม่มีฐานข้อมูลให้ทดสอบครับ ... :D ....
ขอบคุณ อ.ขวด ล่วงหน้าครับ รายงานตัวนี้เป็นของงานผู้ป่วยในครับ พึ่งทำได้ 4 ตัวเอง ถ้าเสร็จ ชาว HOSxP รอรับได้เลย ;D ;D มีประมาณ 12 ตัวที IPD ต้องการ
-
ของ อ.ขวด น่าจะถูกแล้วนะ
mm5:='2009-5-1';
mm6:='2009-6-1';
mm7:='2009-7-1';
Admit=GetSQLDoubledata('select count(*) from an_stat where regdate between "'+mm6+'" and date_add("'+mm7+'",interval -1 day)');
**ที่ผมใช้ mm7 เผื่อใช้กับเดือน กพ. เพราะไม่รู้ว่า 28 หรือ 29 วัน
ยกมา=GetSQLDoubleData('select count(*) from an_stat where regdate <"'+mm6+'" and (dchdate>="'+mm6+'" or dchdate is null)');
ส่วน and a.ward='01' ผมไม่แน่ใจ เห็นมีแต่ใน Admit ไม่มีในยกมา
ลองดูนะคับ
-
อันนี้ที่ผมใช้อยู่ตอนนี้ครับ แต่มันจะเกิดปัญหาถ้ามี Case อย่างนี้ ถ้า นาย ก admit วันที่ 2009-05-29 แต่ไป dischar ในเดือน 2009-07-02 มันจะไม่นับยอดให้ในเดือน 2009-06 ครับ ผมต้องเขียนอะไรเพิ่มอีกครับ
a:=GetSQLDoubleData('select count(a.an) from an_stat a'+
' where a.regdate between "'+m10+'" and a.ward="01"');
a เก็บค่า admit ใน admit
b:=GetSQLDoubleData('select count(a.an) from an_stat a'+
' where a.regdate <= Date_Add("'+mm10+'",interval -1 day) and a.dchdate between "'+m10+'" and a.ward="01"');
b เก็บค่ายอดยกมาในเดือนที่แล้ว
value := a+b;
-
... ว่าจะดูให้แต่ตอนเย็น แต่ว่าพอเลิกอบรม เผลอหลับไปหน่อย ตื่นอีกที 2 ทุ่มกว่าๆ แล้ว ... ;D ...
... ลองดูรายงานแล้วเห็นว่าไม่ได้ต้องการข้อมูลแยกระหว่าง ยกมา กับ รับใหม่ ผมเลยใช้คำสั่งอีกแบบนะครับ แต่ว่าที่ต้องมี if ด้วย เนื่องจากจำนวนคนไข้ที่ยังไม่ได้จำหน่าย(dchdate is null) จะไปแสดงอยู่ที่เดือนที่ยังมาไม่ถึงด้วย(เช่น สั่งรายงานเดือน กค. นี้ จะมีข้อมูลอยู่ที่ เดือน สค. กับ กย. ด้วย) เลยต้องสร้างเงื่อนไขไว้ครับ
แล้วอีกอย่าง ผมเพิ่มค่าตัวแปรที่เป็นวันสุดท้ายของเดือน(em1-em12) ไว้ด้วย เวลาเขียนคำสั่งได้ดูง่ายหน่อยครับ คำสั่งที่ผมใช้แบบนี้ครับ
if FormatDateTime('yyyy-mm-dd',CurrentDate) >= mm9 then
value := GetSQLIntegerData('select count(distinct an) as cc from an_stat '+
'where regdate <= "'+em9+'" and (dchdate >= "'+mm9+'" or dchdate is null) and ward = "01" ')
else
value := 0 ;
ที่ผมลองทำให้ใหม่จะอยู่ล่างสุดนะครับ ท่าน Neo ลองทดสอบเปรียบเทียบดูกับอันเดิมและดูความถูกต้องอีกครั้งด้วยครับ เผื่อมีอะไรที่ผมทำผิดพลาด
แล้วก็ ถ้าทำเสร็จเรียบร้อยแล้ว เอามาแบ่งกันใช้ด้วย อิ อิ ... :D ....
-
.... แล้วก็เลยดูตรงช่องรวมของอัตราครองเตียงให้ด้วย เพราะคิดว่าไม่น่าจะเอาข้อมูลของแต่ละเดือนมาบวกกัน
น่าจะใช้วันนอนรวม x 100 แล้วหารด้วย จำนวนวันตั้งแต่ต้นปีงบฯ ถึงวันสั่งรายงาน x จำนวนเตียง ไม่รู้ว่าผมเข้าใจผิดหรือเปล่าน่ะ คำสั่งที่ผมใช้คำนวณก็ปรับมาจากที่ท่าน Neo ทำไว้ตามรายเดือนครับ
x := GetSQLDoubleData('select sum(admdate) as cc '+
' from an_stat where ward = "01" and dchdate between "'+mm10+'" and "'+em9+'" ');
y := GetSQLDoubleData('select sum(admdate) as cc '+
' from an_stat where pdx like "z38%" and ward = "01" '+
' and dchdate between "'+mm10+'" and "'+em9+'" ');
admdate := x-y;
if FormatDateTime('yyyy-mm-dd',CurrentDate) <= em9 then
z := GetSQLDoubleData('select timestampdiff(day,"'+GetSQLStringData('select date_add("'+mm10+'",interval -1 day)')+'",curdate()) ')
else
z := GetSQLDoubleData('select timestampdiff(day,"'+GetSQLStringData('select date_add("'+mm10+'",interval -1 day)')+'","'+em9+'") ');
Value := (admdate*100) / (z*26);
... ส่วนรายงานที่ผมลองทำอยู่ด้านล่างนะครับ ... :D ....
-
ขอบคุณ อ.ขวดมากครับ ทดสอบแล้ว OK สุดๆๆ ต้องบอกว่าเทพฯ จริง และคำแนะนำดีๆจะมาปรับแก้ไขตาม อ.ขวดครับ คิดว่าวันนี้รายงานสรุปผลงานตามตัวชี้วัดเฉพาะตึกผู้ป่วยในคงจะเสร็จครับ ชาว HOSxP รอรับได้เลยครับ ;D ;D ;D
-
... ว่าจะดูให้แต่ตอนเย็น แต่ว่าพอเลิกอบรม เผลอหลับไปหน่อย ตื่นอีกที 2 ทุ่มกว่าๆ แล้ว ... ;D ...
... ลองดูรายงานแล้วเห็นว่าไม่ได้ต้องการข้อมูลแยกระหว่าง ยกมา กับ รับใหม่ ผมเลยใช้คำสั่งอีกแบบนะครับ แต่ว่าที่ต้องมี if ด้วย เนื่องจากจำนวนคนไข้ที่ยังไม่ได้จำหน่าย(dchdate is null) จะไปแสดงอยู่ที่เดือนที่ยังมาไม่ถึงด้วย(เช่น สั่งรายงานเดือน กค. นี้ จะมีข้อมูลอยู่ที่ เดือน สค. กับ กย. ด้วย) เลยต้องสร้างเงื่อนไขไว้ครับ
แล้วอีกอย่าง ผมเพิ่มค่าตัวแปรที่เป็นวันสุดท้ายของเดือน(em1-em12) ไว้ด้วย เวลาเขียนคำสั่งได้ดูง่ายหน่อยครับ คำสั่งที่ผมใช้แบบนี้ครับ
if FormatDateTime('yyyy-mm-dd',CurrentDate) >= mm9 then
value := GetSQLIntegerData('select count(distinct an) as cc from an_stat '+
'where regdate <= "'+em9+'" and (dchdate >= "'+mm9+'" or dchdate is null) and ward = "01" ')
else
value := 0 ;
ที่ผมลองทำให้ใหม่จะอยู่ล่างสุดนะครับ ท่าน Neo ลองทดสอบเปรียบเทียบดูกับอันเดิมและดูความถูกต้องอีกครั้งด้วยครับ เผื่อมีอะไรที่ผมทำผิดพลาด
แล้วก็ ถ้าทำเสร็จเรียบร้อยแล้ว เอามาแบ่งกันใช้ด้วย อิ อิ ... :D ....
อ.ขวดครับ ลบกวนอีกเรื่องหนึ่งครับ คือผมอยากได้โปรแกรมที่ อ.ขวดใสคำบรรยายในภาพครับสวยน่าจะเอาไว้อธิบาย Report หรือตัวโปรแกรม HOSxP ได้ดี ไม่ทราบว่าใช้โปรแกรมอะไรหรือครับ ส่งมาให้ได้ไหมครับ ขอบคุณมากครับ ;D ;D ;D
-
ขอบคุณ อ.ขวดมากครับ ทดสอบแล้ว OK สุดๆๆ ต้องบอกว่าเทพฯ จริง และคำแนะนำดีๆจะมาปรับแก้ไขตาม อ.ขวดครับ คิดว่าวันนี้รายงานสรุปผลงานตามตัวชี้วัดเฉพาะตึกผู้ป่วยในคงจะเสร็จครับ ชาว HOSxP รอรับได้เลยครับ ;D ;D ;D
อิอิอิ นึกว่าจะง่าย ที่แรกคิดว่าจะทำให้เสร็จภายในวันศุกร์ พอทำตัวชี้วัดตัวอื่น ก็เจอปัญหาใหม่อีกแล้วครับผม ตอนนี้ยังไม่เสร็จเลย ::) ::) ::) ??? ??? ??? ปวดหัว! เสร็จแล้วผมจะรีบอัพให้ชาว HOSxP ยลโฉมทั้นที่ครับ
-
อ.ขวดครับ ลบกวนอีกเรื่องหนึ่งครับ คือผมอยากได้โปรแกรมที่ อ.ขวดใสคำบรรยายในภาพครับสวยน่าจะเอาไว้อธิบาย Report หรือตัวโปรแกรม HOSxP ได้ดี ไม่ทราบว่าใช้โปรแกรมอะไรหรือครับ ส่งมาให้ได้ไหมครับ ขอบคุณมากครับ ;D ;D ;D
... ใช้โปรแกรมจับภาพที่เคยมีการแนะนำไว้ในนี้แหล่ะครับ แต่ผมต้องขอเป็นหลังไมค์นะครับ ... :D ....
-
อ.ขวดครับ ลบกวนอีกเรื่องหนึ่งครับ คือผมอยากได้โปรแกรมที่ อ.ขวดใสคำบรรยายในภาพครับสวยน่าจะเอาไว้อธิบาย Report หรือตัวโปรแกรม HOSxP ได้ดี ไม่ทราบว่าใช้โปรแกรมอะไรหรือครับ ส่งมาให้ได้ไหมครับ ขอบคุณมากครับ ;D ;D ;D
... ใช้โปรแกรมจับภาพที่เคยมีการแนะนำไว้ในนี้แหล่ะครับ แต่ผมต้องขอเป็นหลังไมค์นะครับ ... :D ....
;D ;D ;D มันแจ่มจริงจริงๆๆๆ ครับ บอกชื่อโปรแกรมจับภาพ ได้ป่าวครับ เดี่ยวค่อยหาโหลดเองครับ ;D
-
ขอเก็บด้วยครับ นะครับ อ.ขวด อิอิ ;D
-
เก็บไปอีกรายการ ;D
-
อ.ขวดครับ ลบกวนอีกเรื่องหนึ่งครับ คือผมอยากได้โปรแกรมที่ อ.ขวดใสคำบรรยายในภาพครับสวยน่าจะเอาไว้อธิบาย Report หรือตัวโปรแกรม HOSxP ได้ดี ไม่ทราบว่าใช้โปรแกรมอะไรหรือครับ ส่งมาให้ได้ไหมครับ ขอบคุณมากครับ
มันแจ่มจริงจริงๆๆๆ ครับ บอกชื่อโปรแกรมจับภาพ ได้ป่าวครับ เดี่ยวค่อยหาโหลดเองครับ
;D ;D ;D SnagIt 9.1.2 ครับ มีแบบที่เป็น portable ด้วย(ไม่ต้องติดตั้งลงในเครื่อง) ;D ;D ;D
-
ขอเก็บไ้ว้เหมือนกันครับ ขอบคุณครับ
-
เสร็จแล้วตามผู้ใดสนใจ ไปดาวโหลดได้ ตาม Link
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=11515.0#new