Oracle与Mysql求连续天数的数据

news2025/1/19 23:21:37

问题:最近有开发需求,查询最近一个月连续天数>=2的数据项,我这里数据库日期存储的是yyyymmdd,字符串 (可自行根据自身情况修改)

思路:如果可以找到连续日期的开始与结束时间,那么就可以 where 日期 between 开始日期 and 结束日期即可

关键代码(Mysql方式):

SELECT
	STAT_DATE, -- 数据库日期字段,我这里是yyyymmdd形式的字符串存储
	DATE_ADD( b.STAT_DATE, INTERVAL - ( @rownum := @rownum + 1 ) DAY ) ROWNUM -- 序列
FROM
	( SELECT @rownum := 0 ) a,
	YCYP_TG_ABN_ANALYSE b 
	WHERE -- 筛选条件,筛选最近一个月的数据(2022-07-01是前端传的参数)
	b.TG_ID = '4110100001' 
	AND b.STAT_DATE BETWEEN DATE_FORMAT( DATE_ADD( '2022-07-01', INTERVAL - 30 DAY ), '%Y%m%d' ) 
	AND DATE_FORMAT( str_to_date( '2022-07-01', '%Y-%m-%d' ), '%Y%m%d' ) 
ORDER BY
	b.STAT_DATE ASC

结果如下:

 我们发现,所有最近一个月的日期都会被查询出来,并且有个ROWNUM 标记字段,有没有发现,如果是连续日期的话,ROWNUM值是一样的。

所以我们紧接着根据ROWNUM分组,找出分组后个数>=2的,然后求每个分组的最小日期,降序(由于有多个连续天数的话,我们取最近的)

SELECT
	MIN( t1.STAT_DATE ) AS stat_date,
	MAX( t1.STAT_DATE ) AS end_time 
FROM
	(
	SELECT
		STAT_DATE,-- 数据库日期字段,我这里是yyyymmdd形式的字符串存储
		DATE_ADD( b.STAT_DATE, INTERVAL - ( @rownum := @rownum + 1 ) DAY ) ROWNUM -- 序列
		
	FROM
		( SELECT @rownum := 0 ) a,
		YCYP_TG_ABN_ANALYSE b 
		WHERE-- 筛选条件,筛选最近一个月的数据(2022-07-01是前端传的参数)
		b.TG_ID = '4110100001' 
		AND b.STAT_DATE BETWEEN DATE_FORMAT( DATE_ADD( '2022-07-01', INTERVAL - 30 DAY ), '%Y%m%d' ) 
		AND DATE_FORMAT( str_to_date( '2022-07-01', '%Y-%m-%d' ), '%Y%m%d' ) 
	ORDER BY
		b.STAT_DATE ASC 
	) t1 
GROUP BY
	t1.ROWNUM 
HAVING
	count(*) >= 2 
ORDER BY
	stat_date DESC 
LIMIT 1

如图:我们就得到了连续日期的开始和结束日期,排序过后,我们需要加个limit 1,因为只取最近的连续日期。

 所以 limit 1 之后,最终得到结果 

20220629 ---2022-0701 

那我们只需要在表中查询时间在这个范围内的即可。

oracle代码(Oracle方式):

SELECT
	start_date,
	end_date 
FROM
	(
	SELECT
		MIN( STAT_DATE ) AS start_date,
		MAX( STAT_DATE ) AS end_date 
	FROM
		(
		SELECT
			STAT_DATE,
			TO_DATE( STAT_DATE, 'YYYY-MM-DD' ) - ROW_NUMBER ( ) OVER ( PARTITION BY TG_ID ORDER BY STAT_DATE ) AS grp 
		FROM
			YCYP_TG_ABN_ANALYSE 
		WHERE
			TG_ID = '4110100001' 
			AND STAT_DATE BETWEEN TO_CHAR( TO_DATE( '2022-07-01', 'YYYY-MM-DD' ) - 30, 'YYYYMMDD' ) 
			AND REPLACE ( '2022-07-01', '-', '' ) 
		) 
	GROUP BY
		grp 
	HAVING
		COUNT( * ) >= 2 
	ORDER BY
		start_date DESC 
	) 
WHERE
	ROWNUM = 1

结果:

注意: 

这里的tg_id是分组的列,可以理解为如果tg_id不一样,就算日期连续,但是不是一类,也不会给分配一样的行号。(自行根据自己所需业务填写)

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

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

相关文章

D. Shortest Cycle(floyd求最小环)

Problem - D - Codeforces 给你n个整数a1,a2,..., ana1,a2,...,an。考虑n个节点的图,其中节点ii, jj (i≠ji≠j)是相连的,当且仅当,aiaiAND aj≠0aj≠0,其中AND表示位数和操作。 请找出该图中最短周期的长度,或确定它…

数据库锁表原因、排查、解决

数据库锁表原因、排查、解决 一.场景场景1场景2 二.原因三.排查四.解决方案 一.场景 场景1 锁表通常发生在DML( insert 、update 、delete ) A操作进行全量数据同步,对整个表的粒度进行上锁,导致B操作只能等待A操作完成才能进入…

Vue中mixins(混入)的介绍和使用

什么是Mixin? 想要使用一个事物或者工具,我们首要先了解它是什么,这样我们才好对症下药。 其实Mixin不是Vue专属的,可以说它是一种思想,也可以说它就是混入的意思,在很多开发框架中都实现了Mixin(混入)&a…

我的第一本书终于要印刷了!

终于要印刷了 编辑发来了一个好消息,我的书最快下周就可以印刷出版了。 从开始动笔到提交第一稿,前后有1年的时间, 紧接着和出版社胡老师一起修改, 从一审、二审、三审, 到一校、二校、三校, 确认书…

MobileNetV3详细原理(含torch源码)

作者:爱笑的男孩。 个人简介:打工人。 持续分享:机器学习、深度学习、python相关内容、日常BUG解决方法及Windows&Linux实践小技巧。 如发现文章有误,麻烦请指出,我会及时去纠正。有其他需要可以私信我或者发我邮箱…

企业对外投资为何一定要申请境外投资备案?

随着贸易经济全球化的发展,国内外企业也纷纷把目标转向海外市场,尤其香港,日本,东南亚等地的投资有增无减。 境外投资备案,就是在中国境内设立的公司主体对中国以外的国家进行投资,需要在商务部和发改委进…

高级数据结构与算法 | 自适应基数树(Adaptive Radix Tree)

文章目录 AdaptiveRadixTree基本介绍自适应节点内部节点叶子节点 高度压缩Path CompressionLazy Expansion 算法SearchInsertDeleteBulk loading 并发乐观锁耦合读优化写排除(ROWEX)适配 ROWEX节点替换路径压缩 AdaptiveRadixTree 基本介绍 论文链接&am…

在win10中使用webdriver

一、察看并下载webdriver 查看 下载: 地址为: CNPM Binaries Mirror (npmmirror.com)https://registry.npmmirror.com/binary.html?pathchromedriver/ 找到对应的版本,最后面的数字不一定要完全相同 二、安装 参考: Python…

设计模式-工厂方法模式

大话设计模式这本书反反复复学过好多遍了,每一次学都会有不同的认识,接下来谈谈我最近学习工厂的一次感受; 发展: 一个计算器的例子从不使用工厂到分离出前端、后端,到使用简单工厂再到使用工厂方法,每一步…

第一性原理计算在材料分析中的应用及未来发展趋势

第一性原理计算是一种理论计算方法,能够基于量子力学原理对物质的性质进行高精度预测。它已经成为材料科学研究中不可或缺的工具,帮助我们了解材料的基本特性,优化材料的性能,并发现新的材料。 一、第一性原理计算的基本原理 第一…

zabbix故障排查

zabbix server服务问题可以查看server日志 tail -f /var/log/zabbix/zabbix_server.log 根据日志中的error报错提示分析原因 zabbix agent服务问题可以查看agent日志 tail -f /var/log/zabbix/zabbix_agentd.log 根据日志中的error报错提示分析原因 zabbix的nginx服务问题可…

Window下编译PJSIP,不编译Media模块

Windows系统下使用VS1027进行编译PJSIP。 下载地址 PJSIP的地址:https://github.com/pjsip/pjproject 在线clone太慢的话,可以直接在这里下载比clone会快很多: https://github.com/pjsip/pjproject/releases 安装OpenSSL 直接安装已经编译…

TitanIDE 新版本来袭,全新“效能看板”上线

TitanIDE产品团队于4月17日晚发布了TitanV2.6.3版本,作为一次重要的版本迭代,新版本主要增加/优化了以下重大功能: 全新效能看板上线,研发进度一目了然;新增代码拷贝、下载权限管理功能;项目启动提速&…

创客匠人视频号全域增长落地班成功举办

以专业赋能好老师,打造知识付费商业IP,借助视频号布局商业增长第二曲线。 4月15日-16日,泛知识场景数字化服务商创客匠人在厦门举办「视频号全域增长落地班」。 本次大会邀请到创客匠人CEO、中欧EMBA蒋洪波,福布斯环球联盟创新企业…

电脑开机进不了系统怎么办?电脑开机错误无法显示桌面解决方法

电脑开机进不了系统怎么办?很多用户都有遇到过电脑正常开机,但是无法进入到系统桌面的情况。其实遇到这个问题,大部分的原因都是因为系统出现了故障损坏,我们可以去通过U盘来重装系统的方法进行解决。一起来看看以下的具体操作方法…

jar包反编译工具(java-decompiler)

五种反编译工具 1.jd-gui 下载地址:http://java-decompiler.github.io/ 优点:反编译的源代码基本符合,没有乱七八糟新增的修饰符 缺点:反编译过程耗时较长(50MB需要10分钟左右) 无法还原内部类 可以查看对…

DDPG算法详解

DQN算法详解 一.概述 概括来说,RL要解决的问题是:让agent学习在一个环境中的如何行为动作(act), 从而获得最大的奖励值总和(total reward)。 这个奖励值一般与agent定义的任务目标关联。 agent需要的主要学习内容:第一是行为策略…

leetcode刷题(5)

各位朋友们,大家好,今天是我leedcode刷题的第五篇,我们一起来看看吧。 文章目录 栈的压入,弹出序列题目要求用例输入提示做题思路代码实现C语言代码实现Java代码实现 最小栈题目要求用例输入提示做题思路代码实现Java代码实现 栈的…

QML自定义模块及qmldir的使用

前言 在开发QtQuick项目中,当项目文件很多的情况下,可能会分成多级文件夹来进行分类,还有一些通用类型文件,如公共组件,通用配置等等,需要在各个不同的文件中进行调用,这种情况下,一…

04、Cadence使用记录之器件连接的连线、网络、总线、差分(OrCAD Capture CIS)

04、Cadence使用记录之器件连接的连线、页内网络、总线、跨页网络、差分、电源(OrCAD Capture CIS原理图) 前置教程: 01、Cadence使用记录之新建工程与基础操作(原理图绘制:OrCAD Capture CIS) 02、Cadenc…