Oracle去除重复(某一列的值重复),取最新(日期字段最新)的一条数据

摘要:
相比之下row_number是没有重复值的.lag:arg1是从其他行返回的表达式arg2是希望检索的当前行分区的偏移量。arg3是在arg2表示的数目超出了分组的范围时返回的值。
参考地址:https://blog.csdn.net/nux_123/article/details/45037719
解决思路:用Oracle的row_number() over函数来解决该问题。
解决过程:
1.查看表中的重复记录
SELECT * FROM find_new ;
Oracle去除重复(某一列的值重复),取最新(日期字段最新)的一条数据第1张
2.标记重复的记录
select
t.id,
t.name,
t.grade,
t.class,
t.time,
t.sex,
row_number() OVER(PARTITION BY t.name ORDER BY t.time desc) as row_flg
from find_new t
Oracle去除重复(某一列的值重复),取最新(日期字段最新)的一条数据第2张
3.过滤重复数据,取得最新的记录
SELECT temp.id,temp.name,temp.grade,temp.class,temp.time,temp.sex
from ( SELECT t.*,row_number() OVER(PARTITION BY t.name ORDER BY t.time desc) as row_flg FROM find_new t ) temp
where temp.row_flg = '1';
Oracle去除重复(某一列的值重复),取最新(日期字段最新)的一条数据第3张
4.根据Id排序
SELECT temp.id,temp.name,temp.grade,temp.class,temp.time,temp.sex
from ( SELECT t.*,row_number() OVER(PARTITION BY t.name ORDER BY t.time desc) as row_flg FROM find_new t ) temp
where temp.row_flg = '1' ORDER BY temp.id;
Oracle去除重复(某一列的值重复),取最新(日期字段最新)的一条数据第4张
row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).
与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪列rownum然后再进行排序,而此函数在包含排序从句后是先排序再计算行号码.
row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序).
rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).
dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的 .
lag(arg1,arg2,arg3):
arg1是从其他行返回的表达式
arg2是希望检索的当前行分区的偏移量。是一个正的偏移量,时一个往回检索以前的行的数目。
arg3是在arg2表示的数目超出了分组的范围时返回的值。

免责声明:文章转载自《Oracle去除重复(某一列的值重复),取最新(日期字段最新)的一条数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java实现通过浏览器下载文件【摄影】湖州安吉梅花沟下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

sql 加减时间

引用:http://www.2cto.com/database/201110/107788.html 1. MySQL 为日期增加一个时间间隔:date_add() set @dt = now(); select date_add(@dt, interval 1 day); - 加1天 select date_add(@dt, interval 1 hou...

10条技巧优化数据库速度

  大多数网站的内容都存在数据库里,用户通过请求来访问内容。数据库非常的快,有许多技巧能让你优化数据库的速度,使你不浪费服务器的资源。在这篇文章中,我收录了十个优化数据库速度的技巧。   1、小心设计数据库   第一个技巧也许看来理所当然,但事实上大部分数据库的问题都来自于设计不好的数据库结构。   譬如我曾经遇见过将客户端信息和支付信息储存在同一个数据库...

使用SQL Server语句统计某年龄段人数占总人数的比例(多层查询语句嵌套-比例分析)

需求:需统计出某个集合内,某个段所占的比例,涉及SELECT查询语句的嵌套,如有疑问可留言。 如下: --按性别进行年度挂号年龄段分析--男SELECT 年龄段,SUM(人数) 数量,cast(cast((SUM(人数)/((select count(*) from YXHIS2020..VTBMZGHMX2020 WHERE BTH=0 AND CXB=...

图片右上角添加删除

一、css /*图片适用大小*/ img { width:100%; height:100%; } .imgAll li { /*图片容器position: relative属性*/ width:100px; height:100px; bor...

mysql 时间查询(当天、本周,本月,上一个月的数据)

今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 近7天 SELECT * FROM 表名 where DATE_SUB(CURDATE(),...

MySQL分区表(转)

查看分区情况 SELECT * FROM information_schema.PARTITIONS WHERE table_name='table_name'; PARTITION_NAME:分区的名称 PARTITION_METHOD:分区的类型 TABLE_ROWS:分区数据条数   RANGE分区: create table t ( id int...