将不同时间点的登录状态记录转化为不同时间段的相同登录状态SQL求解

题目

有不同时间点的登录状态记录表state_log如下
在这里插入图片描述
请使用sql将其转化为如下表的不同时间段的相同登录状态记录
在这里插入图片描述

思路分析:

此类问题需要用到lag或lead函数取上下行对应的数据,然后对前后结果做比较打标签(0或1),再对标签所在列做累计求和,最后开窗按照累计值分组取时间最大最小值与状态值
在这里插入图片描述

代码实现:

SELECT min(stime) stime_start,max(stime) stime_end,max(state) state
from(select stime,state,stage_flag,sum(stage_flag) over(rows between unbounded preceding and current row) as accumulatefrom(select stime,state,if(state = pre_state, 0, 1) as stage_flagfrom(select stime,state,lag(state,1,1) over() pre_statefrom state_log) t1) t2) t3
group by accumulate;

代码结果分析

step1:

t1表核心点在lag(state,1,1) over() pre_state ,含义是取state列的结果,向上取1行,取不到时候设定默认值为1。
注:
lag(col,n,DEFAULT)用于统计窗口内往上第n行值
第一个参数为列名
第二个参数为往上第n行(可选,默认为1)
第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)
结果:
在这里插入图片描述
step2:
if(state = pre_state, 0, 1) as stage_flag
对比state与pre_state的结果,相同的赋值0
t2表结果:
在这里插入图片描述

step3
sum(stage_flag) over(rows between unbounded preceding and current row) as accumulate
开窗求累积到当前行的结果值
t3表结果:
在这里插入图片描述

step4
按累计值分组,求最终结果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

富文本内容回显

<el-card><h7>正文内容</h7><template><div v-html"inputForm.bulletinData"></div></template></el-card> 通过 v-html 来回显数据

计算机毕业设计|基于SpringBoot+MyBatis框架健身房管理系统的设计与实现

计算机毕业设计|基于SpringBootMyBatis框架的健身房管理系统的设计与实现 摘 要:本文基于Spring Boot和MyBatis框架&#xff0c;设计并实现了一款综合功能强大的健身房管理系统。该系统涵盖了会员卡查询、会员管理、员工管理、器材管理以及课程管理等核心功能&#xff0c;并且…

数据结构:图文详解单链表的各种操作(头插法,尾插法,任意位置插入,删除节点,查询节点,求链表的长度,清空链表)

目录 一.什么是链表 二.链表的实现 节点的插入 头插法 尾插法 指定位置插入 节点的删除 删除第一次出现的关键字节点 删除所有关键字节点 节点的查找 链表的清空 链表的长度 前言&#xff1a;在上一篇文章中&#xff0c;我们认识了线性数据结构中的顺序表&#xff0…

Docker Compose及Docker 知识点整理

目录 1、Docker Compose 简介 2、为什么要使用Docker Compose 3、Docker Compose安装使用&#xff08;Linux&#xff09; 3.1 下载 3.2 mkdir docker 文件夹目录 3.3 上传docker-compose到docker文件夹 3.4 移动到 /usr/local/bin 目录下 3.5 添加执行权限 3.6 修改文…

盘点40个Android游戏Game源码安卓爱好者不容错过

盘点40个Android游戏Game源码安卓爱好者不容错过 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 下载链接&#xff1a;https://pan.baidu.com/s/193LoWrXM1ZLLCA7mhfZpiA?pwd8888 提取码&#xff1a;8888 项目名称 24点游戏-…

CSS 绝对定位问题和粘性定位介绍

目录 1&#xff0c;绝对定位问题1&#xff0c;绝对定位元素的特性2&#xff0c;初始包含块问题 2&#xff0c;粘性定位注意点&#xff1a; 1&#xff0c;绝对定位问题 1&#xff0c;绝对定位元素的特性 display 默认为 block。所以行内元素设置绝对定位后可直接设置宽高。脱离…

使用系统ProgressBar实现三色进度条

使用系统ProgressBar实现如图三色进度条&#xff1a; //布局中<ProgressBarandroid:layout_width"0dp"android:layout_height"8dp"android:layout_marginLeft"16dp"app:layout_constraintBottom_toBottomOf"id/photo"app:layout_c…

内存免杀--

通过分析Ekko项目了解内存加密过程&#xff0c;这对对抗内存扫描来说很重要。 概述 Edr会扫描程序的内存空间&#xff0c;检测是否存在恶意软件&#xff0c;这种检测恶意软件的方式&#xff0c;应该和静态检测没什么区别&#xff0c;只不过一个扫描的对象是硬盘&#xff0c;一…

MidJourney笔记(6)-Niji模式

Niji模式 回顾一下,在讲解settings命令时,我们可以看到一个Niji字眼。 而且是在Midjourney V4之后才有的,那Niji到底是什么? Niji是MidJourney中用于绘制二次元/动漫风格的模型,那Niji的V4和V5有什么区别呢?

如何本地搭建个人hMailServer邮件服务并实现远程发送邮件

文章目录 前言1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 前言 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpola…

excel表格在线编辑(开源版)

文章目录 前言一、Luckysheetvue3vite 例子如有启发&#xff0c;可点赞收藏哟~ 前言 本文记录好用的开源在线表格 具体如图显示 另外记录下更名后的univer~&#xff0c;如下图&#xff08;有兴趣可自行详细了解&#xff09; univer 在线思维导图 一、Luckysheet 参考git…

vue使用elementui的el-menu的折叠菜单collapse

由于我的是在el-menu所在组件外面的兄弟组件设置是否折叠的控制&#xff0c;我用事件总线bus进行是否折叠传递 参数说明类型可选值默认值collapse是否水平折叠收起菜单&#xff08;仅在 mode 为 vertical 时可用&#xff09;boolean—falsebackground-color菜单的背景色&#…