周哲穎 史佳敏 黃 銳
同濟(jì)大學(xué)附屬第一婦嬰保健院,200125 上海
大數(shù)據(jù)背景下的醫(yī)院管理中,統(tǒng)計(jì)工作除了執(zhí)行國(guó)家衛(wèi)生統(tǒng)計(jì)報(bào)表制度外,各種科研、質(zhì)量、管理數(shù)據(jù)等精細(xì)化需求,均需要統(tǒng)計(jì)人員更多地致力于數(shù)據(jù)查詢與數(shù)據(jù)挖掘工作[1]。病案首頁(yè)數(shù)據(jù)整合了病人的基本信息、住院過(guò)程信息、診療信息和費(fèi)用信息,是醫(yī)院考核的重要依據(jù)。在填寫病案首頁(yè)數(shù)據(jù)時(shí),設(shè)定了統(tǒng)一的代碼和填寫要求,由此形成的首頁(yè)數(shù)據(jù)庫(kù)經(jīng)過(guò)層層質(zhì)控標(biāo)準(zhǔn)監(jiān)測(cè),其數(shù)據(jù)在精準(zhǔn)性、客觀性、應(yīng)用性上更勝于其他信息系統(tǒng)。某醫(yī)院是一所三甲婦產(chǎn)科專科醫(yī)院,年分娩量位列當(dāng)?shù)厝械谝?。該院病案首?yè)數(shù)據(jù)除了依據(jù)國(guó)家衛(wèi)生健康委員會(huì)頒布的2013版病案首頁(yè)數(shù)據(jù)標(biāo)準(zhǔn)外,還根據(jù)醫(yī)院專業(yè)特色增加產(chǎn)科的一些過(guò)程變量和結(jié)局變量,形成了一對(duì)多的數(shù)據(jù)表結(jié)構(gòu)分布。由于病案統(tǒng)計(jì)軟件自帶的統(tǒng)計(jì)查詢功能,只能接受簡(jiǎn)單的查詢條件,在查詢的自由度、效率上不能完全滿足醫(yī)院龐大的數(shù)據(jù)需求[2],數(shù)據(jù)深層檢索必須依靠結(jié)構(gòu)化查詢語(yǔ)言(structured query language,SQL)語(yǔ)言編寫查詢語(yǔ)句,才能兼顧實(shí)現(xiàn)醫(yī)院數(shù)據(jù)大、快、準(zhǔn)的統(tǒng)計(jì)要求。
某醫(yī)院病案統(tǒng)計(jì)軟件是基于.Net平臺(tái)面向服務(wù)對(duì)象進(jìn)行3層構(gòu)架模式,Client—Application—Database,數(shù)據(jù)庫(kù)采用SQL Server 2008,客戶端使C# 語(yǔ)言編寫,開發(fā)工具為Microsoft visual studio 2010 。其基本數(shù)據(jù)表架構(gòu)有6大核心數(shù)據(jù)表和各類代碼表構(gòu)成。
(1)患者基本信息表(tbt_patient_base):包括病人本次住院id、住院號(hào)、姓名、入院日期、出院日期、住院科別、門急診診斷、醫(yī)療組別等。
(2)患者診斷信息表(tbt_ patient _icde):包括本次住院id、診斷編碼、診斷名稱、入院時(shí)情況、疾病轉(zhuǎn)歸等。
(3)患者手術(shù)信息表(tbt_ patient _icpm):包括本次住院id、手術(shù)時(shí)間、手術(shù)編碼、手術(shù)名稱、切口愈合等級(jí)、麻醉方式、手術(shù)醫(yī)生等。
(4)孕產(chǎn)信息表(tbt_patient_preg):包括本次住院id、孕周、出血、胎次、產(chǎn)次等。
(5)分娩信息表(tbt_patient_baby):包括本次住院id、分娩時(shí)間、分娩胎數(shù)、新生兒體質(zhì)量、身長(zhǎng)、評(píng)分、分娩結(jié)局(活/死)、分娩方式等。
(6)費(fèi)用信息表(tbt_patient_cost):包括本次住院id、總費(fèi)用、診療費(fèi)、護(hù)理費(fèi)、檢查費(fèi)、治療費(fèi)、手術(shù)費(fèi)、藥費(fèi)、耗材費(fèi)等16種首頁(yè)涵蓋的費(fèi)用類別與其子費(fèi)用。
患者信息匯總表(tbt_patient_info),匯總了一個(gè)出院病人的基本信息、診斷信息(前7個(gè))、手術(shù)信息(前5個(gè))、孕產(chǎn)婦信息、分娩信息(本次住院分娩第1胎信息)、費(fèi)用信息。
此外,該院住院號(hào)的管理模式采用每人在各院區(qū)使用唯一住院號(hào)的模式。在設(shè)計(jì)數(shù)據(jù)庫(kù)之初約定,病人每次住院使用同一個(gè)住院號(hào),但每次住院時(shí)后臺(tái)也會(huì)自動(dòng)分配給病人一個(gè)id,不同的住院時(shí)間id不同,但住院號(hào)相同。
由于病案統(tǒng)計(jì)系統(tǒng)的設(shè)計(jì)限制,在系統(tǒng)自帶的查詢功能里,無(wú)法實(shí)現(xiàn)一對(duì)多的統(tǒng)計(jì)檢索。例如一個(gè)病人本次分娩雙胎或多胎的情況下,系統(tǒng)自帶的統(tǒng)計(jì)查詢只能顯示第1個(gè)孩子的信息,因此要查詢2020年的所有圍產(chǎn)兒的分娩量及其信息(單胎+多胎),此時(shí)就需要利用SQL語(yǔ)句查詢,完成所有圍產(chǎn)兒的信息統(tǒng)計(jì)。圍產(chǎn)兒是指孕周大于等于28周的分娩胎兒,包括活產(chǎn)和死胎。查詢語(yǔ)句如下:
SELECT A.patno,A.patname,b.babyweight,
b.babysex,b.babyagp,b.babydate
FROM Tbt_patient_info A, Tbt_patient_baby B
WHERE A.id=B.id
and year(A.outdate)=′2020′
and A. gestation >=28
語(yǔ)句的第1句是顯示產(chǎn)婦的住院號(hào)patno、姓名patname、新生兒體質(zhì)量babyweight、新生兒性別 babysex、AGP評(píng)分 babyagp、新生兒出生時(shí)間 babydate。第2句用到SQL最常用、最基本的關(guān)聯(lián)語(yǔ)法:將患者信息匯總表Tbt_patient_info和分娩信息表Tbt_patient_baby用本次住院的id相關(guān)聯(lián),查詢條件是孕周(gestation)≥28周并且出院時(shí)間是2020年。
根據(jù)上述介紹的表結(jié)構(gòu),表Tbt_patient_info里只記錄母親的部分信息和本次分娩的第1胎信息,如果僅用到Tbt_patient_info表,則只能顯示2020年所有產(chǎn)婦及其分娩的第1條信息。如果產(chǎn)婦本次分娩了雙胞胎,則也僅顯示產(chǎn)婦本次分娩的其中一胎信息,缺失了本次分娩的2胎及以上的信息。因此必須關(guān)聯(lián)Tbt_patient_baby表(Tbt_patient_baby記錄了分娩產(chǎn)婦的所有胎兒信息),加上關(guān)聯(lián)條件A.id=B.id,可獲得所有的28周及其以上的圍產(chǎn)兒信息。
在醫(yī)院科研工作中,常常需要調(diào)閱一些同時(shí)伴隨癥的病歷。以調(diào)閱2020年診斷同時(shí)伴有重度子癇前期和妊娠糖尿病的病人為例,如果在系統(tǒng)自帶的查詢界面上設(shè)定查詢條件為診斷編碼“O14.1(重度子癇前期)并且 O24(妊娠糖尿病)”,則查詢的結(jié)果為0;若查詢條件改為“O14.1 或者 O24”,則輸出的結(jié)果為重度子癇前期病人或妊娠期糖尿病病人。針對(duì)這樣的結(jié)果,只有導(dǎo)出查詢結(jié)果,然后取住院號(hào)和出院日期相同的重疊記錄,才能統(tǒng)計(jì)出同時(shí)患有指定2種疾病的病人人數(shù)。這種方法需要花更多的時(shí)間進(jìn)行二次人工篩選,在效率和準(zhǔn)確性上不及SQL的語(yǔ)言查詢:
select A.patno,patname ,icdename11,a. icdename 21,a icdename 22,a. icdename 23,a. icdename 24
from Tbt_patient_info a,Tbt_patient_icde b
where a.id=b.id
and YEAR(a.outdate)=′2020′
and b.Icdecode like ′O14.1%′
and a.id in
(select id from T_dmr_patient_icde where left(icdecode,3)=′O24′)
這是一個(gè)嵌套語(yǔ)句,首先選定患者信息匯總表Tbt_patient_info和患者診斷信息表Tbt_patient_icde。選定Tbt_patient_info是為了顯示患者的住院號(hào)、姓名、主要診斷、其他診斷等患者基本信息,其中Tbt_patient_info中橫向記錄了患者的1個(gè)主要診斷和6個(gè)其他診斷。但由于每個(gè)病人的情況不同,在診斷中無(wú)法確定某個(gè)診斷(例如本例中的重度子癇前期O14.1)在第幾順序診斷上:既有可能在主要診斷(icdename11),也有可能在其他診斷1(icdename21)或者其他診斷2(icdename22)或第N個(gè)診斷上。因此在這種情況下引入患者診斷信息表Tbt_patient_icde。根據(jù)上述表結(jié)構(gòu)介紹可知Tbt_patient_icde表中診斷編碼和診斷名稱的變量只有1個(gè),多個(gè)診斷是垂直縱向記錄的,可以相對(duì)固定診斷編碼變量。診斷數(shù)據(jù)記錄方式見表1和表2。
表1 患者信息匯總表Tbt_patient_info 診斷記錄方式
表2 患者診斷信息表Tbt_patient_icde診斷記錄方式
在選定好數(shù)據(jù)表、確定好相關(guān)變量后,即可編寫第1步查詢語(yǔ)句:
Select A.id,A.patno,A.patname, A.icdename11,A icdename 21,A. icdename 22,A icdename 23,A icdename 24
from Tbt_patient_info a,Tbt_patient_icde b
where a.id=b.id
and YEAR(a.OutDate)=′2020′
and b.IcdeCode like ′O14.1%′
第1步查詢Tbt_patient_info表中出院日期是2020年并且Tbt_patient_icde表里疾病編碼模糊匹配是′O14.1′(這里使用b.IcdeCode like ′O14.1%′,由于重度子癇前期有3個(gè)編碼和診斷,分別是O14.100、O14.101、O14.102,我們可以統(tǒng)一寫成 like ′O14.1%′)。同樣2個(gè)表用id關(guān)聯(lián),即a.id=b.id。
第2步查詢語(yǔ)句是在第一步查詢基礎(chǔ)上增加:
and a.id in
(select id from T_dmr_patient_icde where left(icdecode,3)=′O24′)
語(yǔ)意是:在查詢出2020年診斷為重度子癇前期的這些病人中,通過(guò)這些病人的id繼續(xù)在病人診斷信息表中搜索出同一個(gè)id里存在妊娠期糖尿病(O24)診斷的出院病人。即先確定重度子癇前期的人群,再在這個(gè)人群中繼續(xù)搜索有糖尿病的人。通過(guò)這樣2步的查詢,就可以獲得同時(shí)患有2種指定疾病的患者人數(shù)和相關(guān)信息。
重返率是目前醫(yī)院質(zhì)量安全的重要監(jiān)測(cè)指標(biāo)[3],以31 d非計(jì)劃再入院指標(biāo)為例,如果從系統(tǒng)自帶的界面查詢,查詢條件基本無(wú)法給定;若依靠平時(shí)制度約定的上報(bào)記錄進(jìn)行人工檢索,花費(fèi)時(shí)間久,而且存在一定比例的漏報(bào)現(xiàn)象。但是通過(guò)SQL關(guān)聯(lián)性數(shù)據(jù)查詢,就能實(shí)現(xiàn)快速鎖定統(tǒng)計(jì)范圍:
select a.patno 住院號(hào),a.patname 病人姓名,b.outdate 前次出院日期, c.indate 后次入院時(shí)間,DATEDIFF(dd,b.outdate,c.InDate) 間隔時(shí)間,b.IcdeName11 前次診斷,b.opername1 前次手術(shù),b.OperName2 前次手術(shù),b.OperName3 前次手術(shù),c.icdename11 后次診斷,c.opername1 后次手術(shù),c.OperName2 后次手術(shù),c.OperName3 后次手術(shù)
from T_dmr_card_base A, T_dmr_card_info b,T_dmr_card_info c ---b是前次,C是后次
where a.id=b.id
and YEAR(a.OutDate)=′2020′
and b.id<>C.id
and b.PatNo=c.PatNo
and c.PatNumb=b.PatNumb+1
and b.againplan=’2’
and DATEDIFF(dd,b.outdate,c.InDate)<=31
本例引入了2個(gè)表,分別是患者基本信息表tbt_patient_base、患者信息匯總表tbt_patient_info,其中tbt_patient_info 在本實(shí)例里引入2次,分別代表B區(qū)的前次信息和C區(qū)的后次信息。通過(guò)B區(qū)信息和C區(qū)信息的平行比較,在條件中加入關(guān)鍵變量住院次數(shù)(Patnumb)就可以獲得同一個(gè)病人多次住院的記錄。其中關(guān)鍵條件解讀如下:
① b.id<>C.id and a.PatNo=c.PatNo 表示前一次住院的ID不等于后次住院的ID,但前一次住院和后一次住院是采用同一個(gè)住院號(hào)(在前文已經(jīng)闡述該院管理病案號(hào)的模式);
② c.PatNumb=b.PatNumb+1 表示后一次的住院次數(shù)=前一次住院次數(shù)+1;
③ b.againplan=’2’ 表示前一次住院的再入院計(jì)劃為‘否’;
④ and DATEDIFF(dd,b.outdate,c.InDate)<=31 表示前次出院日期后后次入院日期間隔日期<=31 d。
從第1句select中,我們除了調(diào)取病人的基本信息,更多的是調(diào)取病人前次診斷和手術(shù)和后次入院的診斷和手術(shù),以及2次相鄰入院的時(shí)間間隔天數(shù)。通過(guò)這樣的語(yǔ)句可以將前后2次住院的情況清楚地顯現(xiàn)出來(lái),從而可以看出前后的診療是否具有延續(xù)性,即計(jì)劃內(nèi)的。比如在婦產(chǎn)科中,葡萄胎在31 d內(nèi)的再入院治療是屬于正常計(jì)劃內(nèi)的。又如分娩后31 d內(nèi)再入院,后次診斷是胎盤粘連,手術(shù)是清宮術(shù)則屬于非計(jì)劃內(nèi)的。通過(guò)這樣的查詢均可以完整地羅列出來(lái)各種非計(jì)劃再入院的情況。
母-嬰的疾病關(guān)系是婦產(chǎn)科醫(yī)院一項(xiàng)重要的管理研究?jī)?nèi)容。從目前的數(shù)據(jù)庫(kù)結(jié)構(gòu)上,可以通過(guò)界面查詢的是母親情況和出生孩子的體質(zhì)量、身長(zhǎng)、評(píng)分的關(guān)系,但想進(jìn)一步查詢孩子具體的某一疾病和母親孕產(chǎn)期疾病與處置關(guān)系時(shí),則還是需要通過(guò)SQL的關(guān)聯(lián)性數(shù)據(jù)查詢,進(jìn)行一個(gè)范圍的確定,再進(jìn)行病歷討論和質(zhì)量評(píng)估。
例如,醫(yī)院需要對(duì)診斷為“新生兒缺氧缺血性腦病”的病例進(jìn)行母親孕產(chǎn)期管理的回顧性分析,就需要查詢孩子診斷編碼為P91.600,其母親的疾病史、手術(shù)史、孕產(chǎn)期情況。具體語(yǔ)句如下:
select distinct A.patno 母親住院號(hào), A.patname 母親姓名, A.outdate 母親出院日期, A.outdays 母親住院天數(shù),A.deptname 母親出院科室,A.icdename11 母親主要診斷,icdename21 母親其他診斷1,A. icdename22 母親其他診斷2,A. icdename23 母親其他診斷3, A icdename24 母親其他診斷4,A. icdename25 母親其他診斷5,A.icpmname1母親手術(shù)1, A icpmname 2母親手術(shù)2, A. icpmname3 母親手術(shù)3, A. icpmname 4 母親手術(shù)4, A. icpmname5 母親手術(shù)5
from Tbt_patient_info A , Tbt_patient_base B, Tbt_patient_icde C
where b.outdate>=′2015-01-01′and b.outdate<′2021-01-01′
AND C.icdecode=′P91.600′
AND B.id=C.id
AND RIGHT(A.patno,6)=SUBSTRING(B.patno,4,6)
本例我們邏輯假定孩子相關(guān)住院信息表和診斷表為Tbt_patient_base、Tbt_patient_icde,母親的相關(guān)住院信息表為Tbt_patient_info。因此設(shè)Tbt_patient_info 為A,從A區(qū)中羅列出母親的基本信息包括基本信息、住院時(shí)間、住院科室、相關(guān)疾病、相關(guān)手術(shù)等。
羅列好母親信息后,再將孩子限定條件編寫出來(lái):即從Tbt_patient_icde搜索出診斷編碼為′P91.600′,從Tbt_patient_base限定孩子出院時(shí)間是2015—2020年,語(yǔ)句為:
from Tbt_patient_base B, Tbt_patient_icde C
where b.outdate>=′2015-01-01′and b.outdate<′2021-01-01′
AND C.icdecode=′P91.600′
AND B.id=C.id。
最后將母親的住院號(hào)和孩子的住院號(hào)關(guān)聯(lián)起來(lái)。這里不能用id,因?yàn)閕d是針對(duì)同一個(gè)對(duì)象的,不同對(duì)象的id沒(méi)有關(guān)聯(lián)性。但該院的母嬰住院號(hào)之間是有一定規(guī)律的,即母親住院號(hào)的后6位與其孩子住院號(hào)的第4至第9位是相同的。通過(guò)母嬰住院號(hào)關(guān)聯(lián)的語(yǔ)句為:
RIGHT(A.patno,6)=SUBSTRING (B.patno,4,6)。
通過(guò)這樣的SQL語(yǔ)句搜索就可以獲得孩子診斷編碼為P91.600的相關(guān)母親歷次住院情況。數(shù)據(jù)表邏輯見圖1。
圖1 母-嬰關(guān)系數(shù)據(jù)表邏輯圖
SQL結(jié)構(gòu)化的查詢語(yǔ)句,作為統(tǒng)計(jì)使用的數(shù)據(jù)查詢語(yǔ)言是最常用的功能,通過(guò)select —from—where—group by—order by等結(jié)構(gòu)語(yǔ)句可以快速地將不同的數(shù)據(jù)表內(nèi)數(shù)以萬(wàn)計(jì)的記錄通過(guò)某個(gè)條件和表間的共同索引構(gòu)建組成一個(gè)新的查詢結(jié)果[4]。
研究通過(guò)實(shí)例分析,展示了SQL在解決不同對(duì)象,相同對(duì)象不同時(shí)間、空間之間的關(guān)系查詢。相對(duì)于固有的報(bào)表統(tǒng)計(jì)軟件,其數(shù)據(jù)高度自由結(jié)合性能在統(tǒng)計(jì)工作中起到了極大的輔助作用,其中熟悉數(shù)據(jù)庫(kù)架構(gòu)關(guān)系和語(yǔ)言表達(dá)邏輯是掌握該技能的關(guān)鍵[5]。首先要充分了解系統(tǒng)后臺(tái)的數(shù)據(jù)表結(jié)構(gòu)及結(jié)構(gòu)關(guān)系,在檢索時(shí)能快速反應(yīng)出所用數(shù)據(jù)表。其次掌握SQL的邏輯關(guān)系與表達(dá)方式,在查詢之初能構(gòu)建出較明確的E-R(實(shí)體-聯(lián)系)模型,并能將E-R模型進(jìn)行數(shù)據(jù)語(yǔ)言的轉(zhuǎn)換,可以方便地實(shí)現(xiàn)不同主體數(shù)據(jù)的關(guān)系構(gòu)建。本文始終使用SQL最基本的select語(yǔ)言,而未用union是為了方便讀者進(jìn)行體會(huì)。
使用結(jié)構(gòu)化的查詢語(yǔ)句是大數(shù)據(jù)時(shí)代的必備技能,隨著DRGs的推廣、國(guó)家與地市的三級(jí)公立醫(yī)院績(jī)效考核的相繼推出,對(duì)醫(yī)院的質(zhì)量要求和管理要求提上了一個(gè)新層次。毋庸置疑,數(shù)據(jù)是醫(yī)院考核的重要依據(jù),而多元化的數(shù)據(jù)需求也是新時(shí)代醫(yī)院管理統(tǒng)計(jì)服務(wù)工作必須面對(duì)的新挑戰(zhàn)[6]。統(tǒng)計(jì)人員應(yīng)該加強(qiáng)自身業(yè)務(wù)學(xué)習(xí),將工作經(jīng)驗(yàn)和數(shù)據(jù)技能相結(jié)合,以促進(jìn)職業(yè)綜合素質(zhì)的提高。