Oracle 多条记录根据某个字段获取相邻两条数据间的间隔天数,小于31天的记录都筛选出来
需求描述:在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_countFROM 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
的视图中选择了四个列:FBIHID
、FIHDATE
、prev_fihdate
和 next_fihdate
。其中,FBIHID
表示患者的 ID,FIHDATE
表示患者住院的日期,prev_fihdate
表示患者上一次住院日期,next_fihdate
表示患者下一次住院日期。
为了计算 prev_fihdate
和 next_fihdate
,该查询使用了 LAG
和 LEAD
窗口函数。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) aWHERE 住院次数 > 1AND (一个月后日期 > fihdate or (上一个入院日期 is null or 一个月后日期 is null));
我们解释下这段sql,这段sql用于查找在 31 天内住院两次或以上的患者。查询从名为 v_jc_mae_zy
的视图中选择了四个列:fbihid
、fihdate
、上一个入院日期
和 一个月后日期
。其中,fbihid
表示患者的 ID,fihdate
表示患者住院的日期,上一个入院日期
表示患者上一次住院日期,一个月后日期
表示患者上一次住院日期的一个月后的日期。
为了计算 上一个入院日期
和 一个月后日期
,该查询使用了 LAG
窗口函数和日期函数 INTERVAL
。LAG
函数用于返回在当前行之前的行中指定列的值。这里根据 fbihid
分组,按 fihdate
升序排序,以得到每个患者的住院日期的前一次入院日期。INTERVAL '31' DAY
表示一个月的时间间隔。因此,LAG(FIHDATE) OVER(PARTITION BY FBIHID ORDER BY FIHDATE) + INTERVAL '31' DAY
表示上一次住院日期的一个月后的日期。
接下来,该查询使用 COUNT
窗口函数计算了每个患者的住院次数,将其命名为 住院次数
。
最后,该查询使用条件筛选语句 WHERE
,选择了满足以下条件的行:
- 患者的住院次数大于 1。
- 上一次住院日期的一个月后的日期大于当前的住院日期,或者上一次住院日期或一个月后的日期为空。
总之,这个查询的目的是返回那些住院次数大于 1,且上一次住院日期的一个月后的日期大于当前的住院日期或者上一次住院日期或一个月后的日期为空的患者的 ID、住院日期、上一次住院日期和上一次住院日期的一个月后的日期。
方法有很多种,本次遇到了该问题,所以记录一下,如有错误,还请指正
相关文章:

Oracle 多条记录根据某个字段获取相邻两条数据间的间隔天数,小于31天的记录都筛选出来
需求描述:在Oracle中 住院记录记录表为v_hospitalRecords,表中FIHDATE入院时间,FBIHID是住院号, 我想查询出每个患者在他们的所有住院记录中是否在一个月内再次入院(相邻的两条记录进行比较),并且住院记录大于一的患者…...

【数据挖掘】如何修复时序分析缺少的日期
一、说明 我撰写本文的目的是通过引导您完成一个示例来帮助您了解 TVF 以及如何使用它们,该示例解决了时间序列分析中常见的缺失日期问题。 我们将介绍: 如何生成日期以填补数据中缺失的空白如何创建 TVF 和参数的使用如何呼叫 TVF我们将考虑扩展我们的日…...

CDN、P2P、PCDN的区别是什么
本篇文章为大家介绍一下与网络加速有关的几个重要概念,一起了解一下CDN,P2P和PCDN究竟是什么吧! 1. CDN CDN即Content Delivery Network,中文全称为内容分发网络。 如果内容离用户远,用户可能无法获得及时的响应,那…...

MYSQL练习一答案
练习1答案 构建数据库 数据库 数据表 answer开头表为对应题号答案形成的数据表 表结构 表数据 答案: 1、查询商品库存等于50的所有商品,显示商品编号,商 品名称,商品售价,商品库存。 SQL语句 select good_no,good…...

路由器(第二十五课)
路由器的深入学习 一、路由 1、路由 1) 什么是路由:路由就是数据包从一个网络到另外一外网络的过程 2)支持路由功能的设备:路由器、三层交换机、防火墙 3 路由器转发数据包的依据: -每一台路由器都维护着一张路由表 -路由器是依靠这张路由表来转发数据的 -这张路由表就…...

物联网网关模块可以带几台plc设备吗?可以接几个modbus设备?
随着物联网技术的快速发展,物联网网关模块已经成为了实现物联网应用的重要工具。很多客户在选择物联网网关模块时想了解物联网网关模块的设备接入能力,一个物联网网关模块可以带几台PLC设备?可以接几个Modbus设备? 物联网网关模块…...

SpringBoot中间件—ORM(Mybatis)框架实现
目录 定义 需求背景 方案设计 代码展示 UML图 实现细节 测试验证 总结 源码地址(已开源):https://gitee.com/sizhaohe/mini-mybatis.git 跟着源码及下述UML图来理解上手会更快,拒绝浮躁,沉下心来搞 定义&#x…...

结构化思维:高效能项目经理人的底层能力
大家好,我是老原。 我们经常会说「高效能」,那怎么成为高效能人士?其实除了拼体力和心力以外,高效能更重要的是脑力,这里的脑力不是指智力,而是结构化思维。 随着你在职场中不断成长和进阶,级…...

Pytorch个人学习记录总结 07
目录 神经网络-非线性激活 神经网络-线形层及其他层介绍 神经网络-非线性激活 官方文档地址:torch.nn — PyTorch 2.0 documentation 常用的:Sigmoid、ReLU、LeakyReLU等。 作用:为模型引入非线性特征,这样才能在训练过程中…...

vue3+ts+elementui-plus二次封装树形表格
复制粘贴即可: 一、定义table组件 <template><div classmain><div><el-table ref"multipleTableRef" :height"height" :default-expand-all"isExpend" :data"treeTableData"style"width: 100%…...

机器学习/深度学习常见算法实现(秋招版)
包括BN层、卷积层、池化层、交叉熵、随机梯度下降法、非极大抑制、k均值聚类等秋招常见的代码实现。 1. BN层 import numpy as npdef batch_norm(outputs, gamma, beta, epsilon1e-6, momentum0.9, running_mean0, running_var1)::param outputs: [B, L]:param gamma: mean:p…...

京东技术专家首推:Spring 微服务架构设计,GitHub 星标 128K
前言 本书提供了实现大型响应式微服务的实用方法和指导原则,并通过示例全面 讲解如何构建微服务。本书深入介绍了 Spring Boot、Spring Cloud、 Docker、Mesos 和 Marathon,还会教授如何用 Spring Boot 部署自治服务,而 无须使用重量级应用服…...

R语言--森林图制作
#数据准备- data5 #install.packages("rmda")rm(list=ls())library(MASS)library(rmda)library(dplyr) #mutate依赖环境library(magrittr) #%>%依赖setwd("D:/R/nomo5new2")data...

Tomcat中利用war包部署
在Tomcat中利用war包部署Web应用程序时,默认情况下,应用程序的上下文路径(也称为项目名称)将是war文件的名称(去除.war扩展名)。这意味着您在访问Web应用程序时必须在URL中包含项目名称。例如,如…...

[JAVAee]线程安全
目录 线程安全的理解 线程不安全的原因 ①非原子性 ②可见性 ③代码重排序 体会何为不安全的线程 保证线程安全 一个代码在多线程的环境下就很容易出现错误. 线程安全的理解 线程安全是什么呢?通俗的来讲,线程安全就是在多线程的环境下,代码的结果是符合我们预期的,就…...

ELK环境搭建——概况
Elastic Stack,核心产品包括 Elasticsearch、Kibana、Beats 和 Logstash等等。能够安全可靠地从任何来源获取任何格式的数据,然后对数据进行搜索、分析和可视化。 目录 一:Elasticsearch: 1.1 从数据中探寻各种问题的答案 1.1.1 定义您自己的搜索方式...

面试知识点整理
计算机的物理内存是有限的,所以操作系统在遇到内存不足时,会通过换页机制暂时把 某个进程未使用的内存中的数据搬移到硬盘上(比如 Linux 的 swap 分区),并在系统页表中 删除相应的表项。当该进程访问数据已经被搬移到硬…...

腾讯云服务器CVM计算型c6/c5实例CPU型号、处理器主频大全
腾讯云服务器CVM计算型C6、C5、C4、CN3、C3和C2实例,计算型C6云服务器CPU采用Intel Xeon Ice Lake处理器,主频3.2GHz,睿频3.5GHz,腾讯云服务器网分享更多计算型CVM云服务器CPU型号、处理器主频性能说明: 目录 云服务…...

vue3笔记-脚手架篇
第一章 基础篇 第二章 脚手架篇 vue2与vue3的一些区别 响应式系统: Vue 2 使用 Object.defineProperty 进行响应式数据的劫持和监听,它对数据监听是一项项的进行监听,因此,当新增属性发生变化时,它无法监测到&…...

数字的补数
题目: 对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。 例如,整数 5 的二进制表示是 "101" ,取反后得到 "010" &…...

Taskfile demo
https://github.com/yangyang5214/blog/issues/1 makefile 很好用,但是有些语法我不会。 go-task yml & shell 不错,推荐 Taskfile.yml https://github.com/go-task/task/blob/main/.golangci.yml # go install github.com/go-task/task/v3/cmd/ta…...

MyBatis学习笔记之高级映射及延迟加载
文章目录 环境搭建,数据配置多对一的映射的思路逻辑级联属性映射association分布查询 一对多的映射的思路逻辑collection分布 环境搭建,数据配置 t_class表 t_stu表 多对一的映射的思路逻辑 多对一:多个学生对应一个班级 多的一方是st…...

小程序如何删除/上架/下架商品
在小程序中,产品的删除、上架和下架是常见的操作,可以根据实际需求来管理商品的展示与销售。下面将介绍如何在小程序中删除上架下架商品的具体步骤。 进入商品管理页面, 在个人中心点击管理入口,然后找到“商品管理”菜单并点击。…...

Failed to load local font resource:微信小程序加载第三方字体
加载本地字体.ttf 将ttf转换为base64格式:https://transfonter.org/ 步骤如下 将下载后的stylesheet.css 里的font-family属性名字改一下,然后引进页面里就行了,全局样式就放app.scss,单页面就引入单页面 注: .title…...

使用fastjson错误
说明:使用fastjson时,对象解析不成功,一直报错,但是json格式没有错; 错误信息:Method threw ‘com.alibaba.fastjson.JSONException’ exception. json数据是正确的 分析:注意看,fa…...

【GitOps系列】使用Kustomize和Helm定义应用配置
文章目录 使用 Kustomize 定义应用改造示例应用1.创建基准和多环境目录2.环境差异分析3.为 Base 目录创建通用 Manifest4.为开发环境目录创建差异 Manifest5.为预发布环境创建差异 Manifest6.为生产环境创建差异 Manifest 部署 Kustomize 应用部署到开发环境部署到生产环境 使用…...

Android kotlin高阶函数与Java lambda表达式介绍与实战
一、介绍 目前在Java JDK版本的不断升高,新的表达式已开始出现,但是在Android混淆开发中,kotlin的语言与Java的语言是紧密贴合的。所以Java lambda表达式在kotlin中以新的身份出现:高阶函数与lambda表达式特别类似。接下来我讲会先…...

自然语言处理实战项目13-基于GRU模型与NER的关键词抽取模型训练全流程
大家好,我是微学AI,今天给大家介绍一下自然语言处理实战项目13-基于GRU模型与NER的关键词抽取模型训练全流程。本文主要介绍关键词抽取样例数据、GRU模型模型构建与训练、命名实体识别(NER)、模型评估与应用,项目的目标是通过训练一个GRU模型…...

7.26 Qt
用QT制作一个登陆界面 运行代码 login.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> //信息调试类,用于输出 #include <QIcon> //图标类头文件 #include <QPushButton&…...

【MySQL】库和表的操作
目录 一、库的操作 1.1创建数据库 1.2创建数据库案例 1.3字符集和校验规则 (1)查看系统默认字符集以及校验规则 (2)查看数据库支持的字符集 (3)查看数据库支持的字符集校验规则 (4&…...