mssql < 2005
我有一个包含很多表的复杂数据库,但现在只有患者表和测量表很重要。
我需要的是最新值'code'
与某个值匹配的患者人数。此外,datemeasurement 必须在“2012-04-01”之后。我用两种不同的方式解决了这个问题:
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)
,但不断向我抛出错误。