当前位置: 首页 > news >正文

mysql 分组后每个取最新的一条记录

在MySQL中,若要从一个分组中获取每组的最新一条记录(通常基于时间戳或其他递增的列),可以使用子查询或者窗口函数(如果MySQL版本支持)。

以下是两种不同的实现方法:

方法1: 使用子查询和LIMIT子句

SELECT t1.*
FROM your_table t1
INNER JOIN (SELECT id, MAX(timestamp) AS max_timestampFROM your_tableGROUP BY id
) t2 ON t1.id = t2.id AND t1.timestamp = t2.max_timestamp;

在这个查询中:
        your_table 是你要查询的表名。
        id 是用于分组的字段。
        timestamp 是用于确定哪条记录是“最新”的时间戳字段。

方法2: 使用窗口函数ROW_NUMBER()(如果MySQL 8.0+)

SELECT id, other_columns, timestamp
FROM (SELECT id, other_columns, timestamp,ROW_NUMBER() OVER(PARTITION BY id ORDER BY timestamp DESC) as rnFROM your_table
) t
WHERE rn = 1;

在这个查询中:
        other_columns 代表你需要选择的其他列。
        ROW_NUMBER() 函数会为每个分组内的行分配一个唯一的数字,按timestamp降序排列,最新的记录会得到rn = 1。
        PARTITION BY id 指定了分组依据。
        ORDER BY timestamp DESC 确保了在每个分组内部按照时间戳降序排序。

这两种方法都可以确保每个分组中只选择最新的一条记录。

在方法1中,先通过子查询找到每个分组中的最新日期,然后通过连接操作获取对应的记录。

在方法2中,使用窗口函数ROW_NUMBER()对每个分组内的记录进行排序,并给每条记录分配一个行号,然后筛选出行号为1的记录。

http://www.lryc.cn/news/374234.html

相关文章:

  • Java语法和基本结构介绍
  • TDengine 3.3.0.0 引入图形化管理工具、复合主键等 13 项关键更新
  • C++基础之红黑树
  • ClickHouse数据库对比、适用场景与入门指南
  • 举例说明 如何通过SparkUI和日志定位任务莫名失败?
  • Vue前端通过Axios的post方式传输数据,后端为什么一直接收的值是null?
  • 外链建设如何进行?
  • 深入理解Java正则表达式及其应用
  • Gstreamer学习3----灌数据给管线之appsrc
  • 【深度学习量化交易1】一个金融小白尝试量化交易的设想、畅享和遐想
  • 【0基础学爬虫】爬虫基础之自动化工具 DrissionPage 的使用
  • c++_0基础_讲解7 练习
  • docker一些常用命令以及镜像构建完后部署到K8s上
  • 在typora中利用正则表达式,批量处理图片
  • 构建LangChain应用程序的示例代码:33、如何在LangChain框架中使用HumanInputChatModel来模拟人工输入的聊天模型教程
  • 虚拟机使用桥接模式网络配置
  • 韩顺平0基础学java——第24天
  • leecode N皇后
  • 2024050802-重学 Java 设计模式《实战模板模式》
  • UNIAPP-ADB无线调试
  • 【stm32-新建工程】
  • 写点什么吧,作为STM32系列的开篇……
  • 代码随想录算法训练营第十天| 232.用栈实现队列|225. 用队列实现栈|20. 有效的括号|1047. 删除字符串中的所有相邻重复项
  • Pulsar 社区周报 | No.2024-06-07 | Apache Pulsar 新分支 3.3 版本发布
  • Go源码--sync库(3):sync.Pool(2)
  • Go如何在本地引用以及发布并引用自定义工具包
  • 使用了代理IP怎么还会被封?代理IP到底有没有效果
  • 在WSL2的Ubuntu中安装和使用Docker/Podman
  • 【WEEK16】Learning Objectives and Summaries【Spring Boot】【English Version】
  • AI大模型会让搜索引擎成为历史吗?