子查询按Max DateTime字段提取单个记录

时间:2017-04-10 16:13:55

标签: sql sql-server

我有一个子查询(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 

返回结果......

PAT_ID is censored to protect the innocent

同一位患者有9个结果,但我只想要最近的结果。不确定我做错了什么,非常感谢任何帮助。

3 个答案:

答案 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