精华内容
下载资源
问答
  • oracle针对数据只最新一条的sql

    千次阅读 2020-10-29 14:36:54
    在针对某个类型数据存在多条时,但只想最新的一条。在可以确定时哪种类型时我们使用简单sql就可以解决。 如: select * from ( select * from t_table a where a.tpye=? order by a.time desc ) where rownum=1;...

    业务场景:

          在针对某个类型数据存在多条时,但只想取最新的一条。在可以确定时哪种类型时我们使用简单sql就可以解决。

          如: select * from ( select * from t_table a where a.tpye=? order by a.time desc ) where rownum=1;

         但是在我们不确定时哪种类型时,需要全表扫描或者多数据扫描时,就需要用到oracle中特有的函数解决了。

         如:select * from (select  a.type,row_number() over(partition by a.type order by a.time desc) as rn from t_table a where xxxx) where rn=1;

        其中partition by后面跟的字段表示根据此字段去区分跟分组,order by 进行排序,row_number() over 这个表示根据里面的条件去获取行数,

        总结这个函数的意思:根据type字段分组根据time字段排序后,获取此type在表中存在多少数据(存在多少则表示rn有多少行)rn=1表示取第一行也就拿到了最新的数据。

    展开全文
  • oracle取最新一条数据

    万次阅读 2019-05-20 17:53:40
    最近在做一个项目,数据库就是用的oracle,正好有个获取最新一条数据的需求。 在网上参考了他人的sql,放在自己这儿就是不行。下边是他们的sql SELECT * FROM ( SELECT *,ROWNUM rn FROM t ORDER BY date_col DESC ...

    好几年没用过oracle了,都忘记了。
    最近在做一个项目,数据库就是用的oracle,正好有个获取最新一条数据的需求。
    在网上参考了他人的sql,放在自己这儿就是不行。下边是他们的sql

    SELECT * FROM (
    	SELECT *,ROWNUM rn FROM t ORDER BY date_col DESC
    ) WHERE rn = 1
    

    刚开始放到自己的库里是会报错的"FROM keyword not found where expected"

    SELECT * FROM (
    	SELECT t.*,ROWNUM rn FROM table t ORDER BY t.date DESC
    )  t1
    WHERE t.rn = 1
    

    这样改完之后,sql正确了,但是取出来的数据跟下边这条sql是一样的。

    	SELECT t.*  FROM table t WHERE ROWNUM = 1
    

    后来想到了把ROWNUM重新排序,也就是先排序,再通过ROWNUM来取第一条。成功

    SELECT 
    	t1.*, ROWNUM 
    FROM(
    	SELECT * FROM table t ORDER BY date DESC
    ) t1
    WHERE rownum = 1;
    
    展开全文
  • 结合order by和rownum来做: --第一条 select * from bdatag_tag order by tag_id where rownum = 1; --最后一条 select * from bdatag_tag order by tag_id desc where rownum = 1;

    结合order by和rownum来做:

    --第一条
    select * from bdatag_tag where rownum = 1 order by tag_id ;
    --最后一条
    select * from bdatag_tag where rownum = 1 order by tag_id desc ;

     

    展开全文
  • oracle一次插入多条数据(insert all)

    万次阅读 多人点赞 2018-04-19 15:43:24
    问题 公司的项目,有个功能每次使用需要向数据库插入很多数据,导致页面等待很长时间才有结果。 数据库:oracle11g id:采用sequence自增 每次循环,都会查询次sequence...oracle一次插入多条的方法 在oracle...

    分享一个零基础,通俗易懂,而且非常风趣幽默的人工智能教程(如不能直接点击访问,请以“右键”->“在新标签页中打开链接”方式打开)网站,网址:https://www.cbedai.net/gnailoug/

    问题

    公司的项目,有个功能每次使用需要向数据库插入很多数据,导致页面等待很长时间才有结果。
    数据库:oracle11g
    id:采用sequence自增
    每次循环,都会查询一次sequence,然后insert一条数据,性能非常低。

    改进

    改成一次插入多条数据,id通过触发器自动设置,不再每次先查询sequence,效率提高非常多。

    oracle一次插入多条的方法

    在oracle里面,不支持像mysql那样直接在后面拼多个记录。oracle中有两种方法达到批量插入的效果:

    方法一:采用union all拼接查询方式

    本文不做详细介绍,可在网上查看相关资料。

    insert into pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE)
              select 8000,0,'Multi 8000',1 from dual
    union all select 8001,0,'Multi 8001',1 from dual
    

    ##方法二:采用insert all的方式
    由于insert all方式插入多条时,通过sequence获取的值是同一个,不会自动获取多个,所以id需要通过其他方式设置,(我这里采用触发器方式自动设置id)

    1、创建测试表:

    create table test_insert(
           data_id number(10) primary key,
           user_name varchar2(30),
           address varchar2(50)
    )
    

    data_id为主键,通过sequence产生主键值。

    2、创建序列:

    create sequence seq_test_insert 
    minvalue 1
    maxvalue 999999999999999999999999
    start with 1
    increment by 1
    cache 20;
    

    3、创建触发器
    通过触发器自动给insert语句设置id值

    create or replace trigger tr_test_insert
    before insert on test_insert
    for each row
    begin
      select seq_test_insert.nextval into :new.data_id from dual;
    end;  
    

    4、插入测试数据:

    insert all 
    into test_insert(user_name,address) values('aaa','henan')
    into test_insert(user_name,address) values('bbb','shanghai')
    into test_insert(user_name,address) values('ccc','beijing')
    select * from dual;
    

    相当于下面三个insert into语句,但性能比单条高多了。

    insert into test_insert(user_name,address) values('aaa','henan');
    insert into test_insert(user_name,address) values('bbb','shanghai');
    insert into test_insert(user_name,address) values('ccc','beijing');
    

    需要注意的是,在insert all语句里不能直接使用seq_test_insert.nextval,因为即便每个into语句里都加上seq_test_insert.nextval也不会获得多个值。

    5、查看测试数据

    select * from test_insert;
    

    结果如下图:
    这里写图片描述

    另外,insert all还支持往不同的表里插入数据,如:

    insert all 
    into table1(filed1,filed2)values('value1','value2')
    into table2(字段1,字段2,字段3) values(值1,值2,值3)
    select * from dual;
    

    分享一个零基础,通俗易懂,而且非常风趣幽默的人工智能教程(如不能直接点击访问,请以“右键”->“在新标签页中打开链接”方式打开)网站,网址:https://www.cbedai.net/gnailoug/

    展开全文
  • Oracle分组一条数据

    千次阅读 2014-08-08 15:20:21
    看看以前的私密日志,原来自己之前被很小而简单的问题困惑过! 看着那时候我们还是新手中的新手做的备忘笔记! 其实就是用了Oracle的统计函数而已!...对数据进行分组排序后每组第一条记录:
  • 1.单表查询,多条重复记录只取一条 select * from ( select row_number() over(partition by 重复字段 order by 时间字段 倒序还是顺序) a1, a2.字段1,a2.字段2 from 表 a2 where 1=1 查询条件 )where a1 =...
  • 今天正还有同学问了一个问题,怎么把两条不同的记录合并成一条记录从数据库里面拿出来,oracle数据库。 拿到之后首先想的是,分两条sql语句去查,然后在程序里做拼接。经过沟通发现,同学的需求不是这个样子的,是...
  • 需求:查询一天中第一条最后一条数据 原始表 select * from table1 ; 步骤1:使用row_number() over() 函数对时间排序,一个正序,一个倒序。 select t.name, t.sex, t.time, row_number() over(order by t....
  • Oracle随机取一条数据

    千次阅读 2018-03-19 22:36:31
    select * from (select * from 表名 order by dbms_random.value) where rownum
  • 多条重复记录中只取一条时间最近的记录 select aa.forecast_no, t1.wgt jz, t1.sj zl_sj, t2.wgt mz, t3.wgt pz  from Table1 aa  left outer join (select a.*  from Table2 a
  • oracle一条记录拆分成多条

    千次阅读 2020-07-29 14:47:51
    使用TABLE(SPLIT函数来进行拆分,此函数默认用逗号拆分 SELECT * FROM TABLE(SPLIT('1,2,3,...如上图所示,现需要将RANGE字段的值用逗号拆分成多条记录,就可以使用这个函数。 查询语句: SELECT T1.ID,T1.RANG...
  • 1.第种方式 select max(t1.INVALID_TIME) from T_CUSTOMER t1 where t1.customer_code = '5101' 1.第二种方式 SELECT INVALID_TIME FROM (SELECT * FROM T_CUSTOMER WHERE customer_code='5101' ORDER BY ...
  • 最近项目中的一条sql语句涉及到一个表中相同工单编码中最新的一条数据,在网上看到一函数完美解决此问题,如下是内容要点: 问题:在项目中有一张设备检测信息表DEVICE_INFO_TBL, 每个设备每天都会产生一条检测...
  • ![图片说明](https://img-ask.csdn.net/upload/201912/04/1575432184_434821.png) 这样的查询,我只要一条记录,请问该怎么写呢?
  • Oracle 表连接查询最近一条记录

    千次阅读 2017-11-08 14:01:00
    我们 写一个条件 rn=1 这样就是最近一条了。。 最后去关联你想要的表就好了。。   遇到的问题: 如果其他时间为空 那么他的排序就是 为空的时间排再前面 如何解决呢? 这里使用上面的办法...
  • select * from (select hs.*, row_number() over(partition by hs.ratio_id order by hs.created_date desc) rn from ratio_his hs)) where rn = 1
  • select * from (select t.*, row_number() over(partition by t.strcaseid order by t.cu_date desc) rn from b_push t) c where rn = 1;如上,其中strcaseid为可能有多条重复的id字段,c
  • 以A表数据为准 B C 表无数据则为null 多条数据只取一条 A B C 关联关系为 A.dm = B.dm A.mc =C.mc A.dm = C.mc 想要的结果就是 如果A表有100条数据 连接查询下来就有100条数据 无论B C有多少条数据 [/size]
  • 例如如下sql, SELECT * FROM(  SELECT u.*  ,ROW_NUMBER()OVER(PARTITION BY p.user_id ORDER BY p....利用 ROW_NUMBER()OVER 函数进行分类(PARTITION BY)排序(ORDER BY ),取出多方的最新一条数据进行展示。
  • ORACLE取时间最近的一条数据

    万次阅读 2018-08-07 17:45:29
    在数据变更记录表所有数据的最新一条记录,resid为数据的id,applyid为数据每次变更的单号,A为数据变更记录表 示例代码如下: select lo2.applyid from A lo2 where not exists (select 1 from A lo where lo....
  • oracle 数据重复,只取一条

    千次阅读 2017-10-17 17:53:15
    oracle中重复记录只其中一条 select * from table1 where rowid=any(select max(rowid) from table1 group by field1) 或者 select * from table1 where rowid in (select max(rowid) from table1 group ...
  • oracle数据库,情景:表(客户-业务员)中数据都不完全重复,但是可能多条数据其中某些字段重复。我想要取得表中符合条件的记录,但是这些记录中的客户id和客户名称发生重复的话只能留个。 如上图我想找出“冯...
  • 1.某字段重复,其他字段值不同时,按重复字段分组只取一条的sql语句 (eg:相同的数据某个字段值有差别导致存储两条或多条无意义重复数据的情况)select s.*from ( select a.*, row_number() over(partition by ...
  • Oracle使用虚拟表dual次插入多条记录 从个CSV文件中读取所有的数据,并且插入到Oracle数据库中,并且几分钟内完成,大约有60万条。 网上有人说了,你可以循环insert然后插入几千条以后Commit...
  • //只查询出来结果集中的第一条数据 select *from (select * from 表明 order by id desc ) where rownum=1
  • Oracle一次插入多条数据

    千次阅读 2020-01-17 16:16:07
    Oracle一次插入多条数据 oracle不像mysql那样可以在values后面添加多个插入的值,mysql具体操作 mysql插入多条数据 -- mysql插入多行代码 insert into CB_PRACTICE(id_, type_,remark) values (5,'物理','浮力'),(6,...
  • SELECT  ORDERID,  NAME,  ID,  WORK_TYPE,  WORK_TIME FROM  HR_ATTENDANCE_MANAGEMENT_F UNPIVOT (  WORK_TYPE FOR WORK_TIME IN (  TWENTYSEVEN,  TWENTYEITHT, ...
  • 利用 ROW_NUMBER()OVER 函数进行分类(PARTITION BY)排序(ORDER BY ),取出多方的最新一条数据进行展示。   ----------------------------------------------------------华丽的分割线--------------------...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 240,629
精华内容 96,251
关键字:

oracle多条取最后一条