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
相关产品推荐
相关产品推荐

