読者です 読者をやめる 読者になる 読者になる

DPCデータの分析とかやるブログ

DPCデータの分析なんかをテキトーにやってます。

DPC入院中に行った診療行為を探すSQL(ついでにパラメータの変え方も)

以前、DPC中に使用した注射薬剤を探すSQLを書きました。
これはちょっと修正するだけで、あらゆる診療行為に拡張できます。
このブログではSQLの解説はあんまり真面目にしてきませんでしたので、今回はゆっくり解説をしてみましょう。
なお、SQLってなんだろ、という人には、POSTDの「初心者のためのSQLガイド」が分かりやすくコンパクトにまとまっています。オススメです。
というか私が勉強し始めたときにこの記事があれば・・・

以前紹介したSQL

select e.データ識別番号,e.実施年月日,e.診療明細名称,SUM(e.明細点数・金額*e.行為回数)
from ef1601 AS e
Where e.データ区分 BETWEEN 30 AND 33
AND (データ識別番号,実施年月日) IN (select データ識別番号,実施年月日 
from d1601 Where データ区分 = 93)
group by e.データ識別番号,e.実施年月日,e.診療明細名称
HAVING SUM(e.明細点数・金額*e.行為回数) > 0

いきなりこれを見せられてもちんぷんかんぷんだと思います。職場で後輩に見せたときは、辛そうな顔をされました。
反省しています。

さて、ここにWhere e.データ区分 BETWEEN 30 AND 33という一文がありますね。 英語を素直に読むと、「データ区分が30と33の間にあるところ」です。
SQLはその通りに動いて、データ区分30から33の間のデータ、即ち注射薬剤を引っこ抜いてきます。 さて、こんなSQLをでっち上げてデータを上に見せたところ、「じゃあ次は検査のデータを持ってきて」と言われたとします。
どうしましょうか?

検査データを引っこ抜くSQL

select e.データ識別番号,e.実施年月日,e.診療明細名称,SUM(e.明細点数・金額*e.行為回数)
from ef1601 AS e
Where e.データ区分 = 60
AND (データ識別番号,実施年月日) IN (select データ識別番号,実施年月日 
from d1601 Where データ区分 = 93)
group by e.データ識別番号,e.実施年月日,e.診療明細名称
HAVING SUM(e.明細点数・金額*e.行為回数) > 0
貴様、コピペをしたな!

はい。コピペをしました。 でもよく見てください。 3行目がWhere e.データ区分 = 60になっています。日本語にすれば「データ区分が60のところ」です。
これでデータが出来上がりですが、どうせなので珈琲でも一杯淹れて、PCの前で考えるポーズをするとよいでしょう。 その後見せに行けば、たぶん「お、仕事をしたな」と思ってくれます。

冗談はさておき、SQLでデータ範囲を変更するのはかように簡単です。しかも平易な英文にしか見えません。
上記のコードの意味が全体としてちんぷんかんぷんでも、3行目を修正するだけなら全く難しくないはずです。
このブログで何度が書いていますが、DPCデータのような、一ヶ月で数十万行規模になるデータを扱うなら、まず手を出すのはSQLです。
皆でDPCデータのSQLクエリを共有しあう場所があれば、本当は一番いいのですが・・・
点数算定のノウハウを共有するサイトはあるようですし、探せばそんなサイトもあるのでしょうか?