首页 > 数据库 >Oracle:重复数据去重,只取最新的一条数据

Oracle:重复数据去重,只取最新的一条数据

时间:2024-09-27 15:49:48浏览次数:8  
标签:insert utf8 只取 test user time Oracle NULL 数据

前言

最近开发的时候遇到一个任务,需要对重复的数据进行筛选,只取插入时间最早的一条数据。这里介绍一下解决这类去重问题的几种思路

先看样例数据

解决思路一

先group by找到每个人最新的数据插入时间(insert_time),再通过insert_time作为条件表关联的条件筛选出每个人最新的数据
1. 先group by找到每个人最新的数据插入时间(insert_time)
SELECT
    T.u_name,
    MAX( T.insert_time ) AS t_inserttime 
FROM
    user_test T 
GROUP BY
    T.u_name

2. 通过insert_time作为条件表关联的条件筛选出每个人最新的数据
SELECT
    T1.id,
    T1.u_name,
    T1.u_sex,
    T1.u_phone,
    T1.insert_time,
    T1.update_by 
FROM
    `user_test` T1,
    ( SELECT T2.u_name, MAX( T2.insert_time ) AS t_inserttime FROM user_test T2 GROUP BY T2.u_name ) T3 
WHERE
    T1.u_name = T3.u_name 
    AND T1.insert_time = T3.t_inserttime

结果如下:

解法思路2

通过row_number()over()函数解决 (适用于Oracle)

row_number() over()函数的主要功能是分组排序,实现类似group by + order by的效果

SELECT
    FI.* 
FROM
    ( SELECT T.*, ROW_NUMBER ( ) OVER ( PARTITION BY T.u_name ORDER BY T.insert_time DESC ) RW FROM user_test T ) FI 
WHERE
    FI.RW =1

这里partition by实现了根据用户名进行分组,order by对结果集根据插入时间进行排序,row_number()函数将每一组的行数单独标注了出来。最后我们取rw=1的数据,也就取到了每个重复用户数据的最新一条数据。

 样板数据参考:

DROP TABLE IF EXISTS `user_test`;
CREATE TABLE `user_test`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `u_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `u_sex` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `u_phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `insert_time` datetime NULL DEFAULT NULL,
  `update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of user_test
-- ----------------------------
INSERT INTO `user_test` VALUES (1, '小明', '男', '13288888888', '2020-10-28 09:44:16', 'admin');
INSERT INTO `user_test` VALUES (2, '小明', '男', '13288888888', '2020-10-28 09:45:01', 'admin');
INSERT INTO `user_test` VALUES (3, '小明', '男', '13288888888', '2020-10-28 09:45:35', 'admin');
INSERT INTO `user_test` VALUES (4, '小兰', '女', '16896969696', '2020-10-28 09:45:45', 'admin');
INSERT INTO `user_test` VALUES (5, '小兰', '女', '16896969696', '2020-10-28 09:46:14', 'admin');

SET FOREIGN_KEY_CHECKS = 1;

原文链接:https://www.cnblogs.com/moutory/p/17752806.html

标签:insert,utf8,只取,test,user,time,Oracle,NULL,数据
From: https://www.cnblogs.com/daytoy105/p/18435927

相关文章

  • PARTV-Oracle实例架构-进程架构
    15.进程架构15.1.进程简介进程是操作系统中可以运行一系列步骤的机制。这个机制取决于操作系统。例如,在Linux上,Oracle后台进程是一个Linux进程。在Windows上,Oracle后台进程是进程内的执行线程。代码模块由进程运行。所有连接到Oracle数据库的用户都必须运行以下模块......
  • 实验1 C语言开发环境使用和数据类型、运算符、表达式
    任务1:1#include<stdio.h>23intmain(){4printf("OO\n");5printf("<H><H>\n");6printf("IIII\n");7return0;8} 1#include<stdio.h>23intmain(......
  • Oracle两表关联,只取B表的第一条记录
    1说明A表、B表两表关联,关联出来的结果里B表有不止一条,需求是只要B表结果中的某一条(按某字段排序);首先想到了直接写个带排序的子查询去匹配外围的值,从这个结果集中只要第一条,但是经过验证发现,里边的条件是获取不到外层的值的,因此此方案不可行;发现row_number()over函数可用,以下......
  • oracle rac启停顺序
    一、rac关闭顺序1.停止em服务emctlstatusdbconsoleemctlstopdbconsole#两个节点操作2.停止数据库srvctlstopdatabase-dprod-oimmediate3.停监听srvctlstatuslistenersrvctlstoplistener#停所有监听srvctlstoplistener-n#rac1停某个监听......
  • ETLCloud携手ClickHouse:高效的数据查询效率
    自从大数据处理技术走进大众视野、开源项目Hadoop的出现,以前受制于数据库处理能力的大数据技术蓬勃发展,传统关系型数据库所构建的数据仓库,被以Hive为代表的大数据技术所取代,随着技术不断发展,Hadoop虽然带来了诸多便利性,但是其臃肿和复杂的体系使得在海量数据和高时效性的压力下有......
  • Springboot宠物乐园rp9dc(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,商家,宠物分类,宠物信息,宠物商品,宠物疫苗,疫苗预约,疫苗提醒,萌宠托管,宠物寄养,资讯分类,宠物资讯,商品分类,到期提醒,个人宠物开题报告内容一、研究背......
  • HarmonyOS NEXT-CoreVision Kit-FaceDetector-实现人脸识别,获取人脸数据
    效果演示图,右边的是人脸数据,可用来比对人脸注意这里只有真机才能测试是否成功,测试机型pce-w30实现这个效果很简洁:打开相册、选取图片、打开文件、创建imageSource、创建PixelMap、喂给faceDetector拿到结果在这里我简单封装了两个工具类方便后续使用,分别是:照片选择类、......
  • Springboot宠物寄养酒店系统63ul4(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,宠物寄养,商品分类,商品信息开题报告内容一、选题意义1.理论意义随着人们对宠物关注度的增加和养宠需求的增长,宠物寄养酒店成为了一个重要的服务行业。......
  • Springboot宠物户籍管理z7vi8(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表饲养人员,宠物信息,走失宠物,宠物资讯,通知公告开题报告内容一、研究背景随着人们生活水平的提高,宠物已成为现代家庭中不可或缺的一部分。然而,宠物管理尤其是宠......
  • Springboot宠物管理系统nt169(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,寄养者,宠物分类,养宠经验,宠物寄养,宠物领养,走失宠物,网站公告开题报告内容一、引言随着现代生活节奏的加快和人们情感需求的日益增长,宠物已成为许多家......