Mssql < 2005
多くのテーブルを含む複雑なデータベースがありますが、今のところ、患者テーブルと測定値テーブルだけが重要です。
必要なのは、 の最新の値が'code'
特定の値に一致する患者の数です。また、datemeasurement は '2012-04-01' 以降である必要があります。これを 2 つの異なる方法で修正しました。
SELECT
COUNT(P.patid)
FROM T_Patients P
WHERE P.patid IN (SELECT patid
FROM T_Measurements M WHERE (M.code ='xxxx' AND result= 'xx')
AND datemeasurement =
(SELECT MAX(datemeasurement) FROM T_Measurements
WHERE datemeasurement > '2012-01-04' AND patid = M.patid
GROUP BY patid
GROUP by patid)
と:
SELECT
COUNT(P.patid)
FROM T_Patient P
WHERE 1 = (SELECT TOP 1 case when result = 'xx' then 1 else 0 end
FROM T_Measurements M
WHERE (M.code ='xxxx') AND datemeasurement > '2012-01-04' AND patid = P.patid
ORDER by datemeasurement DESC
)
これは問題なく機能しますが、サブクエリで外部テーブルを結合する必要があるため、クエリが非常に遅くなります (私の言いたいことがわかっている場合)。クエリは、最新のチェックなしで 10 秒、最新のチェックで 3 分かかります。
これはもっと効率的にできると確信しているので、もしよろしければ教えてください:)。
実装してみHAVING datemeasurment=MAX(datemeasurement)
ましたが、エラーが発生し続けます。