我有一个子查询(MS SQL 2016)来提取特定度量的最新测量值。我需要通过PAT_ID将结果测量值链接回我的主查询。我遇到的问题是我无法获得MAX日期(最近的日期),只能在子查询中提取一条记录。
以下查询返回多条记录,而不是最近的记录
SELECT distinct meas.MEAS_VALUE, rec.pat_id, MAX(meas.ENTRY_TIME) "MAX ET"
from ip_flwsht_rec rec
inner join [CLARITY].[dbo].[IP_FLWSHT_MEAS] meas on rec.fsd_id=meas.FSD_ID
and meas.flo_meas_id='14'
and meas.MEAS_VALUE is not null
where meas.ENTRY_TIME>=(DATEADD(day, DATEDIFF(day, 0,getdate()) - 548, 0))
AND rec.pat_id = 'CENSORED'
GROUP BY meas.MEAS_VALUE, rec.PAT_ID
返回结果......
同一位患者有9个结果,但我只想要最近的结果。不确定我做错了什么,非常感谢任何帮助。
答案 0 :(得分:2)
根据您的要求,@ Zack的答案中的top 1
方法可能是最好的方法。它具有所有品质中最具代表性的一种,简洁。
如果top 1
方法不符合您的要求,那么您就非常接近了。在您的问题中,您说I need to link the resulted measure value back to my main query by PAT_ID
。实际上,您需要将它与两个字段链接,即pat_id和entry_time。
为确保每位患者只能获得一条记录,请更改:
SELECT distinct meas.MEAS_VALUE, rec.pat_id, MAX(meas.ENTRY_TIME) "MAX ET"
到此:
SELECT rec.pat_id, MAX(meas.ENTRY_TIME) "MAX ET"
您的最终查询类似于:
with mostRecentRecords as (
select rec.pat_id, MAX(meas.ENTRY_TIME) mostRecentEntry
from etc
group by rec.pat_id
)
select whatever
from your tables
join mostRecentRecords on rec.pat_id = mostRecentRecords.pat_id
and meas.entry_time = mostRecentEntry
答案 1 :(得分:1)
只需在您的选择中添加TOP(1),然后按时间排序:
SELECT distinct TOP(1) meas.MEAS_VALUE, ...
...
ORDER BY meas.ENTRY_TIME DESC
答案 2 :(得分:0)
在加入前使用row_number()
订购meas
条记录,并按fsd_id
进行分区。导致每个meas
的{{1}}最新记录,而不需要fds_id
或汇总。
group by