精华内容
下载资源
问答
  • ROW_NUMBER() OVER(partition by col1 order by col2) 表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内是连续且唯一的)。举例:1.表结构:SQL&...
    ROW_NUMBER() OVER(partition by col1 order by col2) 表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内是连续且唯一的)。

    举例:

    1.表结构:

    SQL> DESC T1;
    Name                                           Null?    Type
    ------------------------------- ------- ----------------------------
    ID                                                    NUMBER
    NAME                                                    VARCHAR2(10)
    DATE1                                                    DATE

    2.查看表数据:

    SQL> SELECT * FROM T1;
            ID NAME                           DATE1
    ---------- ------------------ -----------
           101 aaa                                  09-SEP-13
           101 bbb                                 10-SEP-13
           101 ccc                                  11-SEP-13
           102 ddd                                 08-SEP-13
           102 eee                                  11-SEP-13

    3.ROW_NUMBER() OVER

    SQL> SELECT ID,NAME,DATE1,ROW_NUMBER() OVER(partition by ID order by DATE1 desc) as RN FROM T1;

    //表示根据 ID 字段分组,在分组内部根据 DATE1 字段排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内是连续且唯一的)。


        ID NAME               DATE1               RN
    ---------- ------------------------------ ------------------ ----------
           101 ccc                  11-SEP-13              1
           101 bbb                 10-SEP-13              2
           101 aaa                  09-SEP-13              3
           102 eee                  11-SEP-13              1
           102 ddd                 08-SEP-13              2


    4.把上面语句作为一个子表语句,嵌入到另一条语句中:

    SQL> SELECT ID,NAME,DATE1 FROM (SELECT ID,NAME,DATE1,ROW_NUMBER() OVER(partition by ID order by DATE1 desc) as RN FROM T1)T WHERE T.RN=1;

            ID NAME                           DATE1
    ---------- ------------------------------ ------------------
           101 ccc                                  11-SEP-13
           102 eee                                  11-SEP-13

    这样就达到了去除重复id的效果了,可以根据需要去除重复字段。


    展开全文
  • oracle去重语句

    2018-01-23 12:48:48
    oracle去重语句 ,批量设置,去除重复以及空格racle去重语句racle去重语句
  • oracle去重

    2015-11-19 09:18:00
    oracle去重 create table tmp_table3 as (SELECT seqno FROM (SELECT t.seqno,ROWID, ROW_NUMBER() OVER(PARTITION BY title, uin ORDER BY createtime) ...

    oracle去重

    create table tmp_table3
    as
     (SELECT seqno
                       FROM (SELECT t.seqno,ROWID,
                                    ROW_NUMBER() OVER(PARTITION BY title, uin ORDER BY createtime) DUP
                               FROM calendar_info t
                              where isdelflag = 0
                                and specialtype = 1
                                --and uin = '30647'
                                and comefrom = 12)
                      WHERE DUP > 1);
    --删除邀请表
    delete calendar_invite_info
     where calseqno in (select seqno from tmp_table3);
    --更新变更表
    update CALENDAR_SYNC_UPDATE
       set token       = calendar_sync_update_token.nextVal,
           action_type = 2,
           updateTime  = sysdate
     WHERE calseqno IN (select seqno from tmp_table3);
    --删除活动表
    delete calendar_info
     where seqno in (select seqno from tmp_table3);

     

    转载于:https://www.cnblogs.com/wanghongye/p/4976548.html

    展开全文
  • ORACLE去重排序

    2021-01-14 19:31:35
    ORACLE去重排序 SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY STATION_NAME ORDER BY ID DESC) RNO,STATION_NAME,ID FROM EMES_MAC) WHERE RNO=1 ORDER BY ID DESC 格式:SELECT * FROM (SELECT ROW_...

    ORACLE去重排序

    SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY STATION_NAME ORDER BY ID DESC) RNO,STATION_NAME,ID FROM  EMES_MAC) WHERE RNO=1 ORDER BY ID DESC
    格式:SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY 去重字段 ORDER BY 排序字段 DESC) RNO,去重字段,排序字段 FROM  表名) WHERE RNO=1 ORDER BY 排序字段

    展开全文
  • oracle 去重

    千次阅读 2015-02-05 10:16:48
    oracle去重 1.delete from t where rowid not in (select min(rowid) from t group by 去重字段); 2.(注意:distinct是记录完全一致的重复。而上面是以某一列的值是否重复来决定) insert into 临时...
    oracle去重 
    

    1.delete from t
    where   rowid   not   in   (select   min(rowid)   from   t   group   by   去重字段);

    2.(注意:distinct是记录完全一致的重复。而上面是以某一列的值是否重复来决定)
    insert into 临时表 select distinct mobile from 原表;
    drop table 原表;
    rename 临时表名 to 原表名;

    根据原评论,第二种方法经常用在数据迁移等方面,如有此需求,可以验证。

    *****************************

    而这位老兄写了挺多,先跟作者说声辛苦啦,俺也在加班,暂不详细研究。详文如下:

    重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。
    一、对于部分字段重复数据的删除
            先来谈谈如何查询重复的数据吧。
            下面语句可以查询出那些数据是重复的:
    select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1
            将上面的>号改为=号就可以查询出没有重复的数据了。
            想要删除这些重复的数据,9@SsJ`垠d,zw*~可以使用下面语句进行删除
    delete from 表名 a where 字段1,字段2 in
        (select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)
            上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。所以我建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,件V6dW9@中WG]n供J7这样,执行删除的时候就不用再进行一次查询了。如下:
    CREATE TABLE 临时表 AS
    (select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)
            上面这句话就是建立了临时表,并将查询到的数据插入其中。
            下面就可以进行这样的删除操作了:
    delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 临时表);
            这种先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。

           这个时候,大家可能会跳出来说,什么?你叫我们执行这种语句,那不是把所有重复的全都删除吗?而我们想保留重复数据中最新的一条记录啊!大家不要急,下面我就讲一下如何进行这种操作。
           在oracle中,有个隐藏了自动rowid,里面给每条记录一个唯一的rowid,我们如果想保留最新的一条记录,
    我们就可以利用这个字段,保留重复数据中rowid最大的一条记录就可以了。
           下面是查询重复数据的一个例子:
    select a.rowid,a.* from 表名 a
    where a.rowid !=
    (
       select max(b.rowid) from 表名 b
       where a.字段1 = b.字段1 and
       a.字段2 = b.字段2
    )
           下面我就来讲解一下,中.;&垠TfBI05[L(E无1Ix.I8^DMx业育g|上面括号中的语句是查询出重复数据中rowid最大的一条记录。
           而外面就是查询出除了rowid最大之外的其他重复的数据了。
           由此,我们要删除重复数据,只保留最新的一条数据,就可以这样写了:
    delete from 表名 a
    where a.rowid !=
    (
       select max(b.rowid) from 表名 b
       where a.字段1 = b.字段1 and
       a.字段2 = b.字段2
    )

           随便说一下,上面语句的执行效率是很低的,可以考虑建立临时表,讲需要判断重复的字段、rowid插入临时表中,然后删除的时候在进行比较。
    create table 临时表 as
        select a.字段1,a.字段2,MAX(a.ROWID) dataid from 正式表 a GROUP BY a.字段1,a.字段2;
    delete from 表名 a
    where a.rowid !=
    (
       select b.dataid from 临时表 b
       where a.字段1 = b.字段1 and
       a.字段2 = b.字段2
    );
    commit;

    二、对于完全重复记录的删除

            对于表中两行记录完全一样的情况,可以用下面语句获取到去掉重复数据后的记录:
    select distinct * from 表名
    可以将查询的记录放到临时表中,然后再将原来的表记录删除,最后将临时表的数据导回原来的表中。如下:
    CREATE TABLE 临时表 AS (select distinct * from 表名);
    drop table 正式表;
    insert into 正式表 (select * from 临时表);
    drop table 临时表;

          如果想删除一个表的重复数据,)7yj网件4[e~,mW^可以先建一个临时表,将去掉重复数据后的数据导入到临时表,然后在从
    临时表将数据导入正式表中,如下:
    INSERT INTO t_table_bak
    select distinct * from t_table;

    展开全文
  • oracle 去重查询

    万次阅读 2018-11-23 10:26:33
    --------------------  原作者:搬长城的红砖  原文:...  oracle 数据库多字段去重 方法介绍:distinct 关键字、group by 、row_number ()over(partition by 列 order by 列 desc) 我的需...
  • oracle 去重排序

    千次阅读 2018-10-31 16:44:59
    oracle 去重排序 row_number() over(partition by twf.fkid order by twf.createdate desc) as CODE_ID twf.fkid 根据此分组 : twf.createdate 根据此排序
  • Oracle 去重查询

    2018-02-28 15:42:00
    Oracle 去重查询 CreateTime--2018年2月28日15:38:45 Author:Marydon (一)使用distinct --查询指定区间内表停诊字段的值 SELECT DISTINCT T.CLOSE_TZ FROM CONSULT_SCHEDULE T WHERE T.SCHEDULE_DATE ...
  • Oracle去重查询实例

    2020-08-20 00:50:42
    Oracle去重查询实例 今天工作中遇到了一个关于去重的查询,琢磨了半天,终于想明白了,这里简单记录一下。 distinct函数 说到去重,可能第一反应就是distinct函数,但其实distinct只是针对单一字段的去重有效。 ...
  • Oracle去重

    2019-05-28 13:44:19
    SELECT LONGITUDE,LATITUDE,ID FROM (SELECT W.LONGITUDE,W.LATITUDE,W.ID,ROW_NUMBER() OVER( PARTITION BY W.SHOPNAME ORDER BY W.ID DESC)RN FROM ACW.RESULT W WHERE W.DEPTNAME IS NULL) WHERE RN = 1
  • 工作记录之 oracle去重的三个方法 工作中经常会使用sql分组,总结三个方法: 1、distinct 在 SQL 中,关键字 distinct 用于返回唯一不同的值。其语法格式为: SELECT DISTINCT 列名称 FROM 表名称 假设有一个...
  • oracle 去重几个方法

    万次阅读 2014-08-22 14:58:06
    原文laizi 几个删除重复记录的SQL语句  1.用rowid方法 ... 据据oracle带的rowid属性,进行判断,是否存在重复,语句如下:  查数据:  select * from table1 a where rowid !=(select max
  • Oracle 去重

    2017-08-20 20:13:00
    Oracle 删除重复数据只留一条 查询及删除重复记录的SQL语句 -- 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 group byId having count...
  • 【oracle】【sql】oracle去重 20150225_Oracle_去重.sql参考:http://wenku.baidu.com/view/0a362b2003d8ce2f006623e4.html create table t_distinct(c1 ...
  • Oracle去重查询

    千次阅读 2019-08-23 16:28:39
    distinct的用法 1.distinct+单个字段,表示对该字段进行去重 2.distinct+column1+column...方法一:GROUP BY分组去重 SELECT T.DOCTOR_ID AS FDOCTORCODE, max(T.DOCTOR_NAME) AS FDOCTORNAME, max(T.DOCTOR_PHONE...
  • Oracle去重保留一条

    2019-12-06 10:47:07
    Oracle去重保留一条(本次我们用PARTITION BY分区筛选来解决): select temp.* from (select t.*,row_number() OVER(PARTITION BY NAVLATESTDATE ORDER BY t.id asc) as row_flg from new_fund_net_value_data t )...
  • oracle 数据去重方法

    2019-06-05 22:20:05
    2. 两种去重方法: --方法1: --常用的关键字:distinct --缺点:只能应对单个字段去重,多个字段查询还是会有重复数据 select distinct t.user_name, t.user_age from TEST_USER t; --方法2: --思路:给重复...
  • Oracle去重数据

    2020-12-09 18:07:38
    直接查询去重之后的数据 以上是将去重的数据放入创建的临时表中,然后清空数据重复的表: truncate table test2; 接着将临时表的数据转到目标表: insert into test2 select * from temp_table; 最后删除临时表: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,089
精华内容 5,635
关键字:

oracle去重方法