Oracle 多条记录根据某个字段获取相邻两条数据间的间隔天数,小于31天的记录都筛选出来

news2024/9/29 19:22:15

需求描述:在Oracle中 住院记录记录表为v_hospitalRecords,表中FIHDATE入院时间,FBIHID是住院号, 我想查询出每个患者在他们的所有住院记录中是否在一个月内再次入院(相邻的两条记录进行比较),并且住院记录大于一的患者在此入院的数据

1、方法一

1.1 如下图所示:假如住院号为155131的患者入院记录有三条,该病人第一次入院为2023-05-19 15:19:00、第二次为2023-06-13 15:19:00、第三次为2023-07-16 15:19:00,那么我们排序下计算相邻两个是否在31天内,并且显示这两条记录,sql如下:

SELECT FBIHID, FIHDATE,prev_fihdate,next_fihdate 
FROM (
  SELECT FBIHID, FIHDATE,
         LAG(FIHDATE) OVER (PARTITION BY FBIHID ORDER BY FIHDATE ASC) AS prev_fihdate,
         LEAD(FIHDATE) OVER (PARTITION BY FBIHID ORDER BY FIHDATE ASC) AS next_fihdate,
         COUNT(*) OVER (PARTITION BY FBIHID) AS admissions_count
  FROM v_jc_mae_zy
)
WHERE (FIHDATE - prev_fihdate <= 31 OR next_fihdate - FIHDATE <= 31)
AND admissions_count > 1;

我们解释下这段sql,这段sql是查找在 31 天内住院两次或以上的患者。查询从名为 v_jc_mae_zy 的视图中选择了四个列:FBIHIDFIHDATEprev_fihdatenext_fihdate。其中,FBIHID 表示患者的 ID,FIHDATE 表示患者住院的日期,prev_fihdate 表示患者上一次住院日期,next_fihdate 表示患者下一次住院日期。

为了计算 prev_fihdatenext_fihdate,该查询使用了 LAGLEAD 窗口函数。LAG 函数用于返回在当前行之前的行中指定列的值,而 LEAD 函数用于返回在当前行之后的行中指定列的值。这里根据 FBIHID 分组,按 FIHDATE 升序排序,以得到每个患者的住院日期的前一次和下一次住院日期。

接下来,该查询使用 COUNT 窗口函数计算了每个患者的住院次数,将其命名为 admissions_count

最后,该查询使用条件筛选语句 WHERE,选择了满足以下条件的行:

  • 当前住院日期与上一次住院日期之差小于等于 31 天,或者当前住院日期与下一次住院日期之差小于等于 31 天。
  • 患者的住院次数大于 1。

如图所示:

2、方法二

2.1我们如1.1所说一致,采用另外一种方法,sql如下:

SELECT fbihid,fihdate, 上一个入院日期, 一个月后日期
  FROM (SELECT v.*,
               LAG(FIHDATE) OVER(PARTITION BY FBIHID ORDER BY FIHDATE) AS 上一个入院日期,
               LAG(FIHDATE) OVER(PARTITION BY FBIHID ORDER BY FIHDATE) + INTERVAL '31' DAY AS 一个月后日期,
               COUNT(*) OVER(PARTITION BY FBIHID) AS 住院次数
          FROM v_jc_mae_zy v) a
 WHERE 住院次数 > 1
   AND (一个月后日期 > fihdate or (上一个入院日期 is null or 一个月后日期 is null));

我们解释下这段sql,这段sql用于查找在 31 天内住院两次或以上的患者。查询从名为 v_jc_mae_zy 的视图中选择了四个列:fbihidfihdate上一个入院日期一个月后日期。其中,fbihid 表示患者的 ID,fihdate 表示患者住院的日期,上一个入院日期 表示患者上一次住院日期,一个月后日期 表示患者上一次住院日期的一个月后的日期。

为了计算 上一个入院日期一个月后日期,该查询使用了 LAG 窗口函数和日期函数 INTERVALLAG 函数用于返回在当前行之前的行中指定列的值。这里根据 fbihid 分组,按 fihdate 升序排序,以得到每个患者的住院日期的前一次入院日期。INTERVAL '31' DAY 表示一个月的时间间隔。因此,LAG(FIHDATE) OVER(PARTITION BY FBIHID ORDER BY FIHDATE) + INTERVAL '31' DAY 表示上一次住院日期的一个月后的日期。

接下来,该查询使用 COUNT 窗口函数计算了每个患者的住院次数,将其命名为 住院次数

最后,该查询使用条件筛选语句 WHERE,选择了满足以下条件的行:

  • 患者的住院次数大于 1。
  • 上一次住院日期的一个月后的日期大于当前的住院日期,或者上一次住院日期或一个月后的日期为空。

总之,这个查询的目的是返回那些住院次数大于 1,且上一次住院日期的一个月后的日期大于当前的住院日期或者上一次住院日期或一个月后的日期为空的患者的 ID、住院日期、上一次住院日期和上一次住院日期的一个月后的日期。

方法有很多种,本次遇到了该问题,所以记录一下,如有错误,还请指正

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/789235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

window10脚本转服务教程

先说下脚本/我们启动的一些三方服务转window本机服务目前我了解到的好处 一键设置开机自启、随用随启、延时自启解决一些服务类应用启动后会阻塞当前dos窗口导致桌面一直要开着的问题脚本化服务注册&#xff0c;方便管理&#xff0c;统一运维… 1. 实践涉及内容介绍 编写好的…

力扣刷题SQL-619. 只出现一次的最大数字

MyNumbers 表&#xff1a; ------------------- | Column Name | Type | ------------------- | num | int | ------------------- 这张表没有主键。可能包含重复数字。这张表的每一行都含有一个整数。 单一数字 是在 MyNumbers 表中只出现一次的数字。 请你编写一…

解决uview1.x使用i18n,props在切换语言的时候未及时修改视图的问题

操作流程&#xff0c;用u-modal举例 未修改的u-modal.vue props取消文案 props:{// 取消文案cancelText: {type: String,default: 取消}, } 在这里插入代码片需要修改成适配i18n的 u-modal.vue //跟着官方的this.$t(lang.intro)写法&#xff0c;不知道是我没引好还是怎么的&a…

TCP 协议【传输层协议】

文章目录 1. 简介1.1 TCP 协议是什么1.2 TCP 协议的作用1.3 什么是“面向连接” 2. 简述 TCP2.1 封装和解包2.2 TCP 报文格式2.3 什么是“面向字节流”2.4 通过 ACK 机制实现一定可靠性 3. 详述 TCP3.1 基本认识TCP 报头格式16 位源/目标端口号32 位序列号*32 位确认应答号4 位…

机器学习:GPT3

GPT3 模型过于巨大 GPT3是T5参数量的10倍&#xff01; 训练GPT3的代价是$12百万美元 Zero-shot Ability GPT3的思想是不是能拿掉Fine-tune 只需要给定few-shot或者zero-shot就能干相应的任务了。 few-shot learning&#xff08;no gradient descent&#xff09;&#…

25.3 matlab里面的10中优化方法介绍——Nelder-Mead法(matlab程序)

1.简述 fminsearch函数用来求解多维无约束的线性优化问题 用derivative-free的方法找到多变量无约束函数的最小值 语法 x fminsearch(fun,x0) x fminsearch(fun,x0,options) [x,fval] fminsearch(...) [x,fval,exitflag] fminsearch(...) [x,fval,exitflag,output] fmins…

基于MSP432P401R爬坡小车【2020年电赛C题】

文章目录 一、任务清单1. 硬件部分2. 软件部分 二、OpenMV巡线三、舵机转向四、停止线识别五、技术交流 一、任务清单 1. 硬件部分 主控板&#xff1a; MSP432P401R数据显示&#xff1a; OLED电机&#xff1a; 霍尔编码器电机电池&#xff1a; 7.3V航模电池巡线&#xff1a; …

网络知识点之-路由

路由&#xff08;routing&#xff09;是指分组从源到目的地时&#xff0c;决定端到端路径的网络范围的进程。路由工作在OSI参考模型第三层——网络层的数据包转发设备。路由器通过转发数据包来实现网络互连。虽然路由器可以支持多种协议&#xff08;如TCP/IP、IPX/SPX、AppleTa…

iptables与防火墙

目录 防火墙 安全技术 划分方式 iptables 构成 四表 优先级 五链 iptables的规则 匹配顺序 iptables的命令格式 管理选项 匹配条件 控制类型 隐藏扩展模块 注意事项 防火墙 隔离功能&#xff0c;一般部署在网络边缘或者主机边缘&#xff0c;在工作中防火墙的…

【【51单片机LCD1602模块介绍】】

LCD1602的介绍 显示容量16x2 每个字符是5x7的点阵 VDD 是电源正极 4.5-5.5v VO 是对比度调节电压 RS 数据/指令 选择 1为数据0为指令 RW 读写选择1是读 0为写 E 使能 1为数据有效 下降沿执行命令 D0-D7 数据输入输出 A 背光电源正极 K 背光电源负极 LCD1602的操作流程 1.初始…

艺人商务代言:避雷策略与成功合作之道

避免在艺人商务代言中遇到风险&#xff0c;是每个企业和艺人都应该高度重视的问题。代言活动是一种有效的市场营销手段&#xff0c;可以为企业带来广泛的曝光和销售增长&#xff0c;同时也能让艺人获得额外的收入和更高的知名度。然而&#xff0c;不慎选择错误的代言合作可能带…

PostgreSQL实战-数据库迁移部署

PostgreSQL实战-数据库迁移部署 介绍 根据项目需求&#xff0c;我们需要将现有的PostgreSQL数据库重新部署到新的服务器上。由于项目本身就是基于PostgreSQL数据库构建的&#xff0c;因此数据库迁移将变得十分便捷。接下来&#xff0c;我将简要介绍我们的迁移步骤。 迁移步骤…

IDEA安装热部署插件JRebel详解

JRebel 简介 JRebel是一套JavaEE开发工具。JRebel允许开发团队在有限的时间内完成更多的任务修正更多的问题&#xff0c;发布更高质量的软件产品。 JRebel是收费软件&#xff0c;用户可以在JRebel官方站点下载30天的评估版本。 Jrebel 可快速实现热部署&#xff0c;节省了大量重…

微服务的各种边界在架构演进中的作用

演进式架构 在微服务设计和实施的过程中&#xff0c;很多人认为&#xff1a;“将单体拆分成多少个微服务&#xff0c;是微服务的设计重点。”可事实真的是这样吗&#xff1f;其实并非如此&#xff01; Martin Fowler 在提出微服务时&#xff0c;他提到了微服务的一个重要特征—…

【Linux】Ubuntu基本使用与配置, 以及常见问题汇总(一)

前言 大学期间&#xff0c;感觉很多时候学习课外知识都是被推着往前走&#xff0c;很多内容并没有深入去学习&#xff0c;知识的记录受限于所学比较片面&#xff0c;如今渐渐意识到似乎并没有建立起相关知识的体系架构&#xff0c;缺乏一个系统学习并整理的过程。本文将以Ubunt…

跨境独立站如何应对恶意网络爬虫?

目录 跨境出海独立站纷纷成立 爬虫威胁跨境电商生存 如何有效识别爬虫&#xff1f; 技术反爬方案 防爬虫才能保发展 中国出海跨境电商业务&#xff0c;主要选择大平台开设店铺&#xff0c;例如&#xff0c;亚马逊、eBay、Walmart、AliExpress、Zalando等。随着业务的扩大&…

Error “slow_conv2d_cpu“ not implemented for ‘Half‘

Error “slow_conv2d_cpu” not implemented for ‘Half’ 报错原因&#xff1a; 将输入数据的类型设置为half(半精度浮点数&#xff0c;能加快计算速度)&#xff0c;但是half只有GPU支持&#xff0c;pytorch cpu不支持半(half)精度训练 解决方式&#xff1a; 既然不支持&am…

微信小程序将接口返回的文件流预览导出Excel文件并转发

把接口url替换就可以用了 exportExcel () {wx.request({url: importMyApply, //这个地方是你获取二进制流的接口地址method: POST,responseType: "arraybuffer", //特别注意的是此处是请求文件流必须加上的属性&#xff0c;不然你导出到手机上的时候打不开&#xff…

ES检索结果高亮显示JAVA以及Kibana实现

/*** 查询接口** param searchReqVO*/ public EsSearchPageInfoResVO guessYouWantListForClient(EsSearchRequestVO searchReqVO) {BaseInfo baseInfo getApp();List<Long> catalogues getAccesses();EsSearchPageInfoResVO result new EsSearchPageInfoResVO();Sear…

FreeRTOS(中断管理)

一、中断定义 中断&#xff08;Interrupt&#xff09;是计算机系统中的一种事件&#xff0c;它打断了正常的程序执行流程&#xff0c;引起处理器&#xff08;CPU&#xff09;暂时转去执行其他任务或处理特殊事件。中断通常由硬件设备或者操作系统产生&#xff0c;用于向处理器传…