精华内容
下载资源
问答
  • 主要介绍了Oracle结合Mybatis实现表TOP 10条数据的相关资料,需要的朋友可以参考下
  • sql: select * from ( select rownum rn, KHND_DM || ' 年考核结果 ' || (select codedesc from TY_CODETERM where CODETYPEID = 'CODE_CheckConclusionType' AND CODETERMID = KHDC_DM) KHDC_DM ...

    sql: 

     select * from (

                select rownum rn,

                   KHND_DM || ' 年考核结果 ' || (select codedesc from TY_CODETERM where CODETYPEID = 'CODE_CheckConclusionType' AND CODETERMID = KHDC_DM) KHDC_DM 
                 from (

                    SELECT * FROM TY_EMP_R0183 WHERE EMPID = '59992277' ORDER BY KHND_DM DESC

                 )

    ) k where  rn = 2 ;

    展开全文
  • 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;
    
    展开全文
  • 最近项目中的一条sql语句涉及到取一个表中相同工单编码中最新的一条数据,在网上看到函数完美解决此问题,如下是内容要点: 问题:在项目中有一张设备检测信息表DEVICE_INFO_TBL, 每个设备每天都会产生一条检测...

    最近项目中的一条sql语句涉及到取一个表中相同工单编码中最新的一条数据,在网上看到一函数完美解决此问题,如下是内容要点:

    问题:在项目中有一张设备检测信息表DEVICE_INFO_TBL, 每个设备每天都会产生一条检测信息,现在需要从该表中检索出每个设备的最新检测信息。也就是device_id字段不能重复,消除device_id字段重复的记录,而且device_id对应的检测信息test_result是最新的。

     

    解决思路:用Oracle的row_number() over函数来解决该问题。

    解决过程:

     1.查看表中的重复记录

    select

        t.id,

        t.device_id,

        t.update_dtm,

        t.test_result

    from DEVICE_INFO_TBL t

    查看重复数据

    2.标记重复的记录

    select

        t.id,

        t.device_id,

        t.update_dtm,

        t.test_result,

        row_number() OVER(PARTITION BY device_id ORDER BY t.update_dtm desc) as row_flg   

    from DEVICE_INFO_TBL t

    标记重复记录

     

    3.过滤重复数据,取得最新的记录

    select

        temp.id,

        temp.device_id,

        temp.update_dtm,

        temp.test_result

    from (

             select

                 t.id,

                 t.device_id,

                 t.update_dtm,

                 t.test_result,

                 row_number() OVER(PARTITION BY device_id ORDER BY t.update_dtm desc) as row_flg   

              from DEVICE_INFO_TBL t ) temp

    where temp.row_flg  = '1'

    过滤重复数据





     

    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表示的数目超出了分组的范围时返回的值。

     

     

    文章参考:https://blog.csdn.net/nux_123/article/details/45037719

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

    千次阅读 2014-12-11 12:03:24
    对多数据进行分组排序后每组第一条记录   SQL代码: SELECT*  FROM(SELECT ROW_NUMBER() OVER (PARTITION BY ORDER BYDESC)LEV,.* FROM)   WHERE LEV =1   ORDER BYDESC  --分组列 -- 排序列 --...

    对多数据进行分组排序后取每组第一条记录

     

    SQL代码:
    SELECT*   
    FROM(SELECT ROW_NUMBER() OVER (PARTITION BY<PK_FINANCE_ACCOUNT_1> ORDER BY<amassdate>DESC)LEV,<hx_amass_liquid>.* FROM<hx_amass_liquid>)  
     WHERE LEV =1  
     ORDER BY<PK_FINANCE_ACCOUNT_2>DESC  

    <PK_FINANCE_ACCOUNT_1> --分组列
    <amassdate> -- 排序列
    <hx_amass_liquid> -- 表名
    <PK_FINANCE_ACCOUNT_2> -- 排序列
    注:<hx_amass_liquid>.* --一定要有表名,否则会报“缺失表达式”错误

    分组时不仅想取每组的第一条记录,还想取每组共有几条记录


    SELECT *
    FROM (
    SELECT ROW_NUMBER() OVER(PARTITION BY PK_FINANCE_ACCOUNT ORDER BYamassdate DESC) LEV,
                count(0) over(partition by PK_FINANCE_ACCOUNT) cnt,
                hx_amass_liquid.*
     FROM
     hx_amass_liquid
    )
     WHERE LEV = 1
     ORDER BY PK_FINANCE_ACCOUNT DESC

    展开全文
  • select * from ( select t., row_number() over (partition by user_sid order by sid desc) rn ,count() over ...where user_sid in (select sid from sys_user where user_state = ‘LOCKED’) ) where rn=1
  • oracle 分组后取每组第一条数据数据格式 ...分组取第一条的效果 sql: SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY x ORDER BY y DESC) rn, test1.* FROM test1) WHERE rn = 1 ; ...
  • Oracle 查询出来的数据取第一条 --------------------------------------------------------------------------- 转载自:http://www.itpub.net/thread-246442-1-1.html select * from (select * from <...
  • 需求:先分组,再按时间排序,最后分组第一条 利用oracle的开窗函数可以实现 以下是模板sql ,自行替换 select t.* from (select a.*, row_number() over(partition by 需要分组的字段 order by 更新时间 ...
  • oracle 取第一条数据

    千次阅读 2013-09-06 17:45:27
    /* 分组排序取第一条数据*/ SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY taskbreakid ORDER BY responsedate DESC) LEV, r.*  -- select r.*   FROM tablename r   WHERE...
  • 当前有这样个需求,根据外键对子表数据进行分组,每组中的一条数据就行了,如图: 如:COMMANDID = 26的有两,只取一条数据。 sql语句: select * from(select SYSTEMID,COMMANDID,SUBTYPE,LIST...
  • oracle 分组后每组第一条数据

    千次阅读 2017-05-25 15:20:10
    因为项目中需要将结果集中的相同分组中的数据在组内排序然后再分别取出每个分组的第一记录,所以研究了下 ROW_NUMBER() OVER(PARTITION BY x ORDER BY y DESC) ...分组取第一条的效果 sql  
  • 最近有个有个业务需求(springboot项目集合mybatis):需要查询分组后,每组的第一条数据oracle数据库),可以在业务代码中实现,但是过于繁琐,后来查阅oracle的函数,得出仅仅在sql中即可实现,非常简洁,简化...
  • 电表,大家都知道电表读数并不是真正的耗电量,真正耗电量=此次读数-上次读数 电表设计如下: SQL语句如下,使用Oracle的FIRST_VALUE()和LAST_VALUE()函数实现: SELECT DISTINCT LAST_VALUE (E_VALUE) ...
  • oracle数据库排序后获取第一条数据

    千次阅读 2020-10-10 10:44:11
    想要获取下列sql的数据第一条 select NEXT_FOLLOWUP_DATE from PH_CHILD_HEALTH_EXAM where person_info_id = '3afc119ab460497d85f59b1e135ea6b1' order by followup_Visit_Date desc 实现: select NEXT_...
  • 以某个字段分组 第一条数据 select * from (select t.app_id, t.emp_no, t.device_id, t.device_type, t.last_connect_time, t.device_model, rank() over(partition by t.device_type or
  • 查询数据第一条和最后一,使用排序函数,在查询基础上再次查询 SQl 第一条 SELECT * FROM (SELECT * FROM DSGC_LOG_INSTANCE ORDER BY CREATION_DATE DESC) WHERE ROWNUM=1; 最后一 SELECT * FROM (SELECT * ...
  • oracle分组后每组第一条数据

    千次阅读 2019-03-25 19:40:19
    over(Partition by...) ORACLE特有函数。 oracle的分析函数over 及开窗函数 :分析函数over Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是 对于每个组返回多行...
  • //只查询出来结果集中的第一条数据 select *from (select * from 表明 order by id desc ) where rownum=1
  • 下面我们要实现的就是在sqlserver中实现从每组中取出第一条数据。 例子 我们要从上面获得的有效数据为: 对应的sql语句如下所示: select * from t1 t where id = (select top 1 id from t1 where grp = t.grp ...
  • oracle和mysql分组排序取第一条数据

    千次阅读 2018-12-28 13:34:38
    查每个人的Orderstr 是1数据,并保证name不重复 oracle select *  from (SELECT a.*, row_number() over(partition by ida order by orderstr) rn  FROM (select orderstr, name, ida from test) a ) where.....
  • 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;...
  • oracle 根据某个字段获取第一条数据 根据分组获取排序的第一条数据 select * from ( SELECT ROW_NUMBER()over(PARTITION by 分组字段 ORDER BY 排序字段 desc) as ro, xxx需要查询的字段 from 表名 ) dual where ...
  • oracle去除重复, 最新的第一条数据

    万次阅读 2018-08-10 16:33:32
    问题:在项目中有一张设备检测信息表DEVICE_INFO_TBL, 每个设备每天都会产生一条检测信息,现在需要从该表中检索出每个设备的最新检测信息。也就是device_id字段不能重复,消除device_id字段重复的记录,而且device_...
  • 结合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;
  • SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY 分组字段 ORDER BY 排序字段 DESC) rn, test1.* FROM test1) WHERE rn = 1 ;
  • ②分组排序后取第一条的效果: 二、sql语句 2.1、基础语句 select t.* from (select a.*, row_number() over(partition by 需要分组的字段 order by 排序的字段 desc) rw from 表 a) t where t.rw = 1 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 101,528
精华内容 40,611
关键字:

oracle取第一条数据