You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server技术问题:如何对比指定item_code的最大rpt_time?

嘿,我来帮你搞定对比这些item_code最大rpt_time的需求!首先提个小细节:你原查询里写的pat_no = '33561'和需求里的'33516'不一致,记得先修正这个,不然会查错数据哦~

针对你的需求,我给你两种实用的实现方式:

方式1:直接获取每个item_code的最大报告时间

如果只需要对比每个目标项目的最新报告时间,用GROUP BY配合MAX()函数最简洁,还可以用IN替代一堆OR让语句更清爽:

SELECT 
    [pat_no],
    [item_code],
    MAX([rpt_time]) AS max_rpt_time
FROM [Tmhtc_PHR].[dbo].[lab_item] 
WHERE 
    [pat_no] = '33516'
    AND [item_code] IN ('09015', '09002', '09025', '09026')
GROUP BY [pat_no], [item_code]
ORDER BY max_rpt_time DESC

这个语句会按pat_no和item_code分组,直接算出每个项目的最晚报告时间,返回的结果能让你一目了然对比各个项目的最新时间。

方式2:同时获取最大时间对应的检测值

如果你还需要看到每个项目最新报告时间对应的value(检测值),那就用窗口函数ROW_NUMBER()来实现,它能帮你精准定位到每个item_code下最新的那条记录:

WITH ranked_lab_items AS (
    SELECT 
        [pat_no],
        [item_code],
        [value],
        [rpt_time],
        -- 按item_code分组,每组内按报告时间倒序排名
        ROW_NUMBER() OVER (PARTITION BY [item_code] ORDER BY [rpt_time] DESC) AS rn
    FROM [Tmhtc_PHR].[dbo].[lab_item] 
    WHERE 
        [pat_no] = '33516'
        AND [item_code] IN ('09015', '09002', '09025', '09026')
)
SELECT 
    [pat_no],
    [item_code],
    [value],
    [rpt_time] AS max_rpt_time
FROM ranked_lab_items
WHERE rn = 1  -- 取每组排名第一的(也就是最新的那条)
ORDER BY max_rpt_time DESC

这种方式返回的结果包含了每个项目最新报告时间对应的检测值,方便你同时对比时间和数值信息。

内容的提问来源于stack exchange,提问作者thomas Lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:13:18