我有一个查询显示一堆关于人员的信息,以及他们是否曾经存在过一组 dxcode。每一列都是对同一张表中另一组 dxcode 的不同检查:
示例输出:
pid . . . .HTN . . .DM
123 . . . Y . . . . .N
456 . . . N . . . . .N
询问:
select
p.pid
,CASE WHEN HTN.pid is not null THEN 'Y' ELSE 'N' END AS HTN
,... (other case statements)
from p
left outer join (
SELECT dx.pid, max(create_timestamp) as maxdate
FROM pdx
WHERE pdx.dxcode IN ('401','401.0','401.1','401.9')
group by dx.pid
) as HTN on p.pid = HTN.pid
...其他连接同一个 pdx 表以查询其他 dx 代码是否存在
我的查询有效,但我认为它没有尽可能高效。我真的不需要 maxdate 来做任何事情,但它确实有效。在此之前,我使用的是 select distinct person,但意识到它必须做多少后处理,并且查询性能已经大大提高。对于最佳实践,我认为使用 max 仅返回一个结果的额外计算仍然是不必要的计算。
我尝试使用exists、left join、top 1 1 和case 语句的变体来做同样的事情,但我只是没有正确执行代码。
谢谢。我知道这必须是一个简单的答案。我一直在寻找的术语并没有得到我希望的答案。