如何用SQL删除表中除最新一条以外的所有记录?

发布时间:2026/8/23 19:53:17

如何用SQL删除表中除最新一条以外的所有记录?
用 ROW_NUMBER() 窗口函数标记并删除旧记录直接DELETE时无法“保留最新一条”必须借助排序和行号来识别哪些该删。核心思路是按时间字段如created_at或id降序排给每行打上序号只保留ROW_NUMBER() 1的那条其余全删。常见错误是写成DELETE FROM table WHERE id NOT IN (SELECT MAX(id) FROM table)—— 这在有重复时间、或id不连续/非主键时会漏删或多删更糟的是若表为空或只有 1 行MAX(id)返回NULL导致整张表被误删。务必确保排序依据字段能唯一确定“最新”——优先用带时区的created_at其次才是id前提是自增且不跳号PostgreSQL / SQL Server / Oracle / MySQL 8.0 都支持ROW_NUMBER()但语法细节不同MySQL 要求子查询套一层SQL Server 可直接在DELETE中用 CTE执行前先用SELECT验证要删的行SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at DESC) AS rn FROM logs;确认rn 1的确实是预期旧数据MySQL 8.0 实际可执行的删除语句MySQL 不允许在子查询中直接引用被删表所以必须用 CTE 或派生表绕过限制。以下写法经实测可用假设按user_id分组保留每组最新一条WITH ranked AS (SELECT id, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at DESC) AS rnFROM logs)DELETEl FROM logs lINNER JOIN ranked r ON l.id r.idWHERE r.rn 1;注意PARTITION BY是可选的——如果目标是全表只留最新一条不分组就把PARTITION BY user_id去掉改成ORDER BY created_at DESC即可。别漏写INNER JOIN否则 MySQL 会报错You cant specify target table for update in FROM clause若用id排序确保它代表插入顺序用created_at更安全但要注意 NULL 值——加WHERE created_at IS NOT NULL过滤大表慎用该操作会锁表或产生大量 binlog建议在低峰期执行并提前备份SQLite 中没有 ROW_NUMBER() 怎么办SQLite 3.25.0 支持窗口函数但旧版本比如 macOS 自带的 3.19不支持。这时得用自关联 子查询模拟DELETEFROM logsWHERE id NOT IN (SELECT MIN(id) FROM logs l2WHERE l2.user_id logs.user_idGROUP BY user_id);这个写法靠GROUP BY MIN(id)找出每组“最小 id”即最早插入的然后删掉所有不在这个集合里的行——但它保留的是“最早一条”不是“最新一条”。要保留最新得把MIN(id)换成MAX(id)前提是id严格递增且能代表时间顺序。如果时间字段是created_at且 SQLite 版本够新优先用ROW_NUMBER() OVER (ORDER BY created_at DESC)如果版本太老又必须按时间删只能先导出最新行到临时表清空原表再导入——没有优雅的单语句解注意NOT IN遇到子查询返回NULL时整个条件为UNKNOWN导致零行被删加AND id IS NOT NULL防御WHERE 条件里的时间字段有 NULL 值怎么办ORDER BY created_at DESC会让 NULL 排在最前面MySQL 默认行为结果可能是删掉了非 NULL 的新记录留下 NULL 的“脏数据”。这不是 bug是 SQL 标准定义。显式控制 NULL 位置ORDER BY created_at DESC NULLS LASTPostgreSQL / Oracle 支持MySQL 和 SQLite 用ORDER BY created_at DESC, id DESC辅助排序更稳妥的做法是过滤掉 NULLWHERE created_at IS NOT NULL加在子查询或 CTE 中避免干扰排序逻辑如果业务允许建表时就给时间字段加NOT NULL DEFAULT CURRENT_TIMESTAMP从源头杜绝这个问题实际执行时分组维度、时间字段是否可靠、数据库版本、NULL 处理这四点卡住大多数人。没跑通之前先用SELECT把rn 1的行查出来看一眼比反复试删安全得多。

相关新闻

结构体思维:从零散变量到数据聚合,提升代码可维护性

结构体思维:从零散变量到数据聚合,提升代码可维护性

2026/8/23 19:53:17

1. 从一个“简单”的需求说起 最近在做一个后台管理系统的用户模块,产品经理提了个需求:要在用户列表页展示用户的头像、昵称、ID、注册时间,并且点击某个用户能跳转到详情页。这听起来再简单不过了,对吧?我一开始也是…

Java全栈面试进阶宝典:从基础到架构的23个核心模块

Java全栈面试进阶宝典:从基础到架构的23个核心模块

2026/8/23 19:53:17

1. 项目概述:Java全栈面试进阶宝典的核心价值 最近三年Java全栈岗位的面试难度呈现指数级上升,从早期的SSM框架八股文到现在需要完整掌握云原生、性能优化和系统设计能力。我在担任某大厂面试官的两年期间,累计评估过300候选人,发…

智能体的“记忆”难题

智能体的“记忆”难题

2026/8/23 19:53:17

智能体的“记忆”难题 1 | 一个被忽视的关键问题 2 | 人类的记忆 vs. AI的记忆 3 | 当前解决方案及其局限 4 | 理想中的AI记忆系统 5 | 这意味着什么?#推理式AI崛起#思维链与慢思考

SpringBoot企业招聘平台开发指南与毕业设计实践

SpringBoot企业招聘平台开发指南与毕业设计实践

2026/8/23 21:53:22

1. 项目概述:SpringBoot企业招聘平台毕业设计这个基于SpringBoot的企业招聘平台是典型的计算机专业毕业设计项目,采用当前企业级开发的主流技术栈实现。作为一个完整的招聘系统,它需要涵盖企业端和求职者端的核心功能模块,同时满足…

Java面试高频问题解析:HashMap与并发编程实战

Java面试高频问题解析:HashMap与并发编程实战

2026/8/23 21:53:22

1. 为什么Java面试总爱问这些问题?作为面试过上百名Java工程师的面试官,我经常被候选人问到:"为什么你们总爱问HashMap原理?为什么每个公司都要考多线程?"这背后其实反映了企业筛选人才的底层逻辑。Java作为…

Java大厂面试深度解析:核心技术、框架与分布式系统

Java大厂面试深度解析:核心技术、框架与分布式系统

2026/8/23 21:53:22

1. 互联网大厂Java面试全景解析刚结束字节跳动三面技术考核的候选人张明(化名)在茶水间整理笔记时,突然被面试官叫住:"你刚才提到ConcurrentHashMap的扩容机制,能具体说说触发扩容的阈值计算方式吗?&q…

制造业来料管理实战指南:从检验到协同的质量控制体系

制造业来料管理实战指南:从检验到协同的质量控制体系

2026/8/23 21:53:22

1. 项目概述:为什么“来料管理”是生产质量的命门干了十几年制造业,从一线质检员做到质量总监,我最大的体会就是:质量是生产出来的,但源头是管出来的。这个“源头”,十有八九指的就是“来料管理”。很多工厂…

机械图纸批量标注:从手工操作到 AI 识图的效率提升方案

机械图纸批量标注:从手工操作到 AI 识图的效率提升方案

2026/8/23 21:53:22

在机械图纸处理流程中,气泡标注是质检环节的基础工序。一张复杂零件图纸往往包含数十甚至上百个尺寸点位,传统手工标注方式需要逐一点选尺寸、拖拽调整气泡位置、手动编排序号,再配合公差手册逐一查询并填写上下偏差,最后人工整理…

YOLO模型预训练与微调实战:从通用检测到领域适配

YOLO模型预训练与微调实战:从通用检测到领域适配

2026/8/23 21:43:22

1. 项目概述:从“拿来主义”到“量体裁衣”在计算机视觉,尤其是目标检测领域,YOLO(You Only Look Once)系列模型因其出色的速度和精度平衡,已经成为工业界和学术界事实上的标准工具之一。无论是做安防监控、…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/23 0:02:09

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/23 0:02:09

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/23 0:02:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/23 0:02:09

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/23 0:02:09

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/23 0:02:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…