Sql group by 分组取时间最新的一条数据(示例代码)

 更新时间:2024年04月26日 10:08:49   作者:涛哥是个大帅比  
这篇文章主要介绍了Sql group by 分组取时间最新的一条数据,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

项目场景:

数据库:Oracle

表名:Test

字段名:Id、PId、Name、Time

需求:根据PId分组,1、取时间最新的一条数据;2、取时间最早的一条数据。

示例代码: 

一、取时间最新的一条数据

1.取时间最新的记录分组,允许重复

多条Time一样的都是最新记录

select *
from test t
where
pid 
in
(
    select PId from Test t
    where
    time=(select max(time) from Test t1 where t1.PId=t.PId)
    group by Pid
)
and
time=(select max(time) from Test t1 where t1.PId=t.PId)

2.分组后取时间最新的记录,不允许重复

如果Id是序列自增长可以使用max(id),多条Time一样的只取一条

/*注意Id必须使用聚合函数Max*/
SELECT max(Id), Pid, MAX(Time) as MaxTime
FROM Test
GROUP BY Pid

3.使用ROW_NUMBER()窗口函数,不允许重复

如果Id是uuid类型无法使用max(id)的解决办法,使用ROW_NUMBER()窗口函数

在这个查询中,我们使用了ROW_NUMBER()窗口函数,并按照Pid进行分组。然后,我们按照Time降序排序,以便最新的时间排在前面。最后,在外部查询中,我们选择排名为1的记录,即每个分组中时间最新的记录。

/*降序是为了where KeyId=1 (1是固定值第一条),如果升序由于不知道每组多少条where中KeyId就无法过滤了*/
select *
from (
  select row_number() over(partition by Pid order by Time desc) as KeyId ,* from Test   
) d
where KeyId=1

二、取时间最早的一条数据

 这个查询使用了窗口函数MIN来获取每个分组中的最小时间值(min_time)。然后,在外部查询中,通过比较Time和min_time来过滤出每个分组中时间最早的数据行。

SELECT *
FROM (
  SELECT *,
         MIN(Time) OVER (PARTITION BY Pid) AS min_time
  FROM Test
) t
WHERE Time = min_time; 

到此这篇关于Sql group by 分组取时间最新的一条数据的文章就介绍到这了,更多相关Sql group by 分组取数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql每半小时平均值计算的sql语句

    mysql每半小时平均值计算的sql语句

    有时候我们需要计算每半小时的平均值,那么就需要参考下面的sql语句了
    2015-11-11
  • MySQL的MRR(Multi-Range Read)优化原理解析

    MySQL的MRR(Multi-Range Read)优化原理解析

    MRR优化是MySQL中一种重要的查询优化技术,它通过减少磁盘I/O的随机性和提高缓存效率,显著提升了查询性能,这篇文章主要介绍了MySQL的MRR(Multi-Range Read)优化原理详解,需要的朋友可以参考下
    2024-08-08
  • 解读mysql中的null问题

    解读mysql中的null问题

    这篇文章主要介绍了解读mysql中的null问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • mysql-8.0.30压缩包版安装和配置MySQL环境过程

    mysql-8.0.30压缩包版安装和配置MySQL环境过程

    该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量、初始化MySQL服务、启动服务以及修改root用户密码等步骤
    2025-01-01
  • MySql主键id不推荐使用UUID的原因分析

    MySql主键id不推荐使用UUID的原因分析

    MySQL的索引主要分为主键索引(PRIMARY KEY),唯一索引(UNIQUE) ,普通索引(INDEX)和全文索引(FULLTEXT) ,主键索引是一种特殊的唯一索引,不允许有空值,这篇文章主要介绍了MySql主键id不推荐使用UUID的原因分析,需要的朋友可以参考下
    2023-03-03
  • 不重启Mysql修改root密码的方法

    不重启Mysql修改root密码的方法

    如何不重启mysqld,且没有权限修改用户账号和权限的情况下,如何重新设置root密码?不知道没关系,在此之前我也是不知道如何操作的,先看看下面的几种重置root密码的方法
    2014-03-03
  • MySQL中MVCC机制的实现原理

    MySQL中MVCC机制的实现原理

    这篇文章主要介绍了MySQL中MVCC机制的实现原理,MVCC多版本并发控制,MySQL中一种并发控制的方法,他主要是为了提高数据库的读写性能,用更好的方式去处理读写冲突
    2022-08-08
  • MySQL8.2.0安装教程分享

    MySQL8.2.0安装教程分享

    这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤
    2025-02-02
  • mysql5.7.20 安装配置方法图文教程(mac)

    mysql5.7.20 安装配置方法图文教程(mac)

    这篇文章主要为大家详细介绍了mac下mysql5.7.20 安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • mysql alter语句用法实例

    mysql alter语句用法实例

    这里简单分享几个mysql alter语句用法,方便大家使用
    2013-02-02

最新评论