首页 > 数据库 >MySQL: 划分具有连续相同值的区间

MySQL: 划分具有连续相同值的区间

时间:2024-12-04 10:57:42浏览次数:6  
标签:over MySQL 划分 time 区间 rn type 08 select

需求

有一组数据,第一列是类型A/B,第二列是操作时间,怎么取出不同类型不同时间段的最大、最小操作时间?
输入:
image
输出:
image

建表语句:

create table test2 (
	`type` varchar(5),
	`time` timestamp
)engine=innodb;

insert into test2
values
('A', '2021-08-09 10:00:00'),
('A', '2021-08-09 10:04:00'),
('A', '2021-08-09 10:04:06'),
('B', '2021-08-12 10:04:00'),
('B', '2021-08-13 10:04:00'),
('A', '2021-08-14 10:04:00'),
('A', '2021-08-15 10:08:00'),
('B', '2021-08-16 10:04:00'),
('B', '2021-08-16 10:04:00'),
('B', '2021-08-18 10:04:00')

解决

select distinct
    type,
    min_type,
    max_type
from (
    select
        `type`,
        `time`,
        max(`time`) over (partition by flag) max_type,
        min(`time`) over (partition by flag) min_type
    from (
        select
            a.*,
            cast(rn2_type as signed) - cast(rn_time flag as signed)
        from (
            select
                `type`,
                `time`,
                row_number() over (order by `time`) rn_time,
                row_number() over (partition by type order by `time`) rn2_type
            from test2
        ) a
    ) a
) a

过程解析

嵌套sql从最里层开始看,非数值连续类型铺垫,先设置两个标签rn_time,rn_type:

select 
	`type`,
	`time`,
	row_number() over(order by time ) rn_time,
	row_number() over(partition by type order by time) rn2_type
from test2

image

rn_time,rn_type相减得到连续类型分组:

select
    a.*,
    cast(rn2_type as signed) - cast(rn_time flag as signed)
from (
    select
        `type`,
        `time`,
        row_number() over (order by `time`) rn_time,
        row_number() over (partition by type order by `time`) rn2_type
    from test2
) a

image

求分组最大值和最小值:

select
    `type`,
    `time`,
    max(`time`) over (partition by flag) max_type,
    min(`time`) over (partition by flag) min_type
from (
    select
        a.*,
        cast(rn2_type as signed) - cast(rn_time flag as signed)
    from (
        select
            `type`,
            `time`,
            row_number() over (order by `time`) rn_time,
            row_number() over (partition by type order by `time`) rn2_type
        from test2
    ) a
) a

image

最后一步:去重:

select distinct
    type,
    min_type,
    max_type
from (
    select
        `type`,
        `time`,
        max(`time`) over (partition by flag) max_type,
        min(`time`) over (partition by flag) min_type
    from (
        select
            a.*,
            cast(rn2_type as signed) - cast(rn_time flag as signed)
        from (
            select
                `type`,
                `time`,
                row_number() over (order by `time`) rn_time,
                row_number() over (partition by type order by `time`) rn2_type
            from test2
        ) a
    ) a
) a

来源

本文来源:https://blog.csdn.net/qq_34019697/article/details/114578668

标签:over,MySQL,划分,time,区间,rn,type,08,select
From: https://www.cnblogs.com/FengZeng666/p/18585817

相关文章

  • 【MySQL】表的增删改查
    表的增删改查一、向表添加数据1.1单行数据,全列插入1.2多行数据,指定列插入1.3插入或则更新1.4替换二、Retrieve(查询)2.1select2.2where条件2.3对查询到的结果排序2.4筛选分页结果三、update(更新)四、delete(删除数据)五、聚合函数六、groupby的使用一、向表添加......
  • 通过flinkSql将kafka和mysql连接
    kafkaToKafka{"user_id":"1","page_id":"1","status":"success"}{"user_id":"1","page_id":"1","status":"success"}{"user_id&q......
  • MySQL底层概述—10.InnoDB锁机制
    大纲1.锁概述2.锁分类3.锁实战之全局锁4.锁实战之表级锁(偏读)5.锁实战之行级锁(偏写)—行级锁升级表级锁6.锁实战之行级锁(偏写)—间隙锁7.锁实战之行级锁(偏写)—临键锁8.锁实战之行级锁(偏写)—幻读演示和解决9.锁实战之行级锁(偏写)—优化建议10.锁实战之乐观锁11.......
  • A109 PHP+MYSQL+LW+网上论坛网站 军事BBS系统的设计与实现 源码+文档 全套 教程
    网上军事论坛网站系统1.项目摘要2.研究背景3.项目功能4.界面展示5.源码获取1.项目摘要随着计算机网络的普及,如今越来越多的论坛类网站也是数不胜数,各种类型的论坛交流网站,深受当前网友们的喜欢。网上军事论坛网站的成立,是基于对于想要了解更多军事方面的资讯信息的......
  • MySQL--索引
    索引一、索引定义索引是一种独立存在的,对数据库表中一列或多列的值进行排序(目的:加快查询速度,提高查询效率)。二、案例演示索引是如何提高查询速度的?示例:--未建立索引select*fromtest_indexwherename='我的年龄12999';--......
  • Mysql简介及相关知识
    一、Mysql简介1、介绍1.1什么是数据库?数据库:database,数据的仓库(用来存放数据库对象)按照一定的数据结构来组织、存储和管理的数据的仓库,简单来说就是存储数据的仓库。数据库系统组成:DBS是由DB和DBMS两部分组成。计算机硬件、DBMS、......
  • MySQL 常用的日期函数
    两个日期相减:TIMESTAMPDIFF函数语法:TIMESTAMPDIFF(unit,begin,end)说明:TIMESTAMPDIFF函数返回end-begin的结果,其中begin和end是DATE或DATETIME表达式。unit参数是确定end-begin的结果的单位,表示为整数。以下是有效单位:取值含义MICROSECOND毫秒SECOND......
  • 245 微信+PHP+MYSQL+LW+基于微信的校园健身小程序的设计与实现 源码 配置 文档
    基于微信的校园健身小程序的设计与实现1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取1.摘要近几年来,随着我国居民生活水平的提高,人们对于健身养生保健方面也是尤为关注,而电子商务在基于互联网信息技术的发展而普及,近几年,随着微信小程序的应用成熟,也......
  • 免费送源码:Java+B/S+My eclipse+MySQL Springboot 连锁超市零售管理系统 计算机毕业设
         摘 要在网络信息的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,超市零售管理只能以用户为导向,按品种小批量组织生产,以产品的持续创新作为超市零售管理最重要的竞争手段。系统采用了B/S结构,将所有业务......
  • 计算机毕业设计原创定制(免费送源码):Java+ssm+JSP+Ajax+MySQL SSM汽车租赁管理系统
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对汽车租赁信息管理等问题,对其进行研究分析,然后开发设计出汽车租赁管理系统以解决问题。汽车......