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;
分类:
oracle
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?