oracle 使用函数 ROW_NUMBER() OVER(PARTITION BY 列 ORDER BY 列 排序 ),自关联日志表,将列数据转换为 行数据

需求关联日志,呈现以下效果,使用 ROW_NUMBER() OVER(PARTITION BY ) 函数 排序分组函数

ID
1
2
3
4
5

效果

1 2
2 3
3 4
4 5

日志表图 换床的日志记录

结果表图 ,期待结果 换床前床号,换床后床号

分析,可以通过关键词将患者分组后排序然后组成两个临时表,在临时表中添加 排序号 RNUM , SQL外层使用这个排序号 RNUM 添加关联规则本次序号 A的排序+1 关联到B表的下一行数据
sql 写法

SELECT T.PATIENT_ID,
       T.VISIT_ID,
       T.CHANGE_DATE_TIME,
       T.BED_NO 换床前床号,
       T.WARD_CODE,
       T1.WARD_CODE,
       T1.BED_NO 换床后床号
  FROM (SELECT A.PATIENT_ID,
               A.VISIT_ID,
               A.CHANGE_DATE_TIME,
               A.BED_NO,
               A.WARD_CODE,
               ROW_NUMBER() OVER(PARTITION BY A.PATIENT_ID, A.VISIT_ID ORDER BY A.CHANGE_DATE_TIME) RNUM
          FROM BED_CHANGE_INFO A) T,
       (SELECT B.PATIENT_ID,
               B.VISIT_ID,
               B.CHANGE_DATE_TIME,
               B.BED_NO,
               B.WARD_CODE,
               ROW_NUMBER() OVER(PARTITION BY B.PATIENT_ID, B.VISIT_ID ORDER BY B.CHANGE_DATE_TIME) RNUM
          FROM BED_CHANGE_INFO B) T1
 WHERE T.PATIENT_ID = T1.PATIENT_ID(+)
   AND T.VISIT_ID = T1.VISIT_ID(+)
   AND T.RNUM + 1 = T1.RNUM(+)
 ORDER BY T.PATIENT_ID, T.VISIT_ID, T.CHANGE_DATE_TIME;
posted @   iullor  阅读(212)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示