精华内容
下载资源
问答
  • Oracle 分组排序后取第一条数据
    2021-04-14 14:21:02

    select * from (
    select t., row_number() over (partition by user_sid order by sid desc) rn ,count() over (partition by user_sid) nums from sys_user_rel t
    where user_sid in (select sid from sys_user where user_state = ‘LOCKED’) ) 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 ...

    一、实现效果

    ①原表效果:存在重复的编号(PARTNER_ID)内容,访问时间(VISIT_DATE)不同

     

    ②分组排序后取第一条的效果:【实现对编号去重,且取访问时间最新的一条数据】

    二、sql语句

    2.1、基础语句

    select  t.*  
       from (select a.*, row_number() over(partition by 需要分组的字段 order by 排序的字段 desc) rn  
               from 表 a) t  
      where t.rn = 1  
    

    2.2、实现语句

    【实现对编号去重,且取访问时间最新的一条数据】的sql语句如下:

    SELECT * FROM(
    SELECT ROW_NUMBER()over(PARTITION by PARTNER_ID ORDER BY VISIT_DATE DESC) as RN,VI.PARTNER_ID,VI.VISIT_DATE
      FROM VISIT_INFO VI
    ) dual  WHERE RN=1

    三、参考资料

    ①分组函数 partition by 的详解,与order by 区别

    高级统计(数据报表利器)

    展开全文
  • ORACLE分组排序后获取第一条和最后一值参考链接实践后记 参考链接 ORACLE分组排序后获取第一条和最后一值 实践 最近遇到的sql的问题。 wx_user的手机号有部分有问题,发生了串登录。原本一个用户一个手机号,...

    ORACLE分组排序后获取第一条和最后一条值

    参考链接

    ORACLE分组排序后获取第一条和最后一条值

    实践

    最近遇到的sql的问题。
    wx_user的手机号有部分有问题,发生了串登录。原本一个用户一个手机号,现在变成了多个。
    该用户的初始手机号是在登录履历表WX_USER_LOGIN中按照其身份证号查找的第一条(时间)。
    根据以上分析,sql如下:

    select u.id id,u.id_no idno,u.mobile wrongmobile,t.id_no tin, t.mobile truemobile from wx_user u,
      (   select id_no,mobile from (
             select
                     t1.id_no,
                     t1.mobile,
                     row_number() over(PARTITION BY t1.id_no order by t1.create_time) rowss1
                     from (select * from WX_USER_LOGIN t where id_no in 
                          (select id_no from wx_user where mobile in (
                           select mobile from wx_user group by mobile having count (*)>1))
                           ) t1
           
      )
      where rowss1 = '1') t
      where u.id_no in(t.id_no)
    

    首先,揪出错误的手机号及对应的身份证:

    select id_no from wx_user where mobile in (
                           select mobile from wx_user group by mobile having count (*)>1)
    

    根据身份证号查出登录履历表:

    select * from WX_USER_LOGIN t where id_no in 
                          (select id_no from wx_user where mobile in (
                           select mobile from wx_user group by mobile having count (*)>1))
    

    以上记录为表t1
    进行分组排序:

    select
                     t1.id_no,
                     t1.mobile,
                     row_number() over(PARTITION BY t1.id_no order by t1.create_time) rowss1
                     from t1
    

    取分组排序后的第一条

    select id_no,mobile from (
             select
                     t1.id_no,
                     t1.mobile,
                     row_number() over(PARTITION BY t1.id_no order by t1.create_time) rowss1
                     from (select * from WX_USER_LOGIN t where id_no in 
                          (select id_no from wx_user where mobile in (
                           select mobile from wx_user group by mobile having count (*)>1))
                           ) t1
           
      )
      where rowss1 = '1'
    

    分组排序后的第一条作为表t,联合原表和表t,得出所有需要的字段:

    select u.id id,u.id_no idno,u.mobile wrongmobile,t.id_no tin, t.mobile truemobile from wx_user u,t  where u.id_no in(t.id_no)
    

    select * from a,b where a.id = b.id 意思就变了,此时就等价于: select * from a inner join b on a.id = b.id。即就是内连接。

    后记

    分组中用到PARTITION,它还有分区表的意思。接下来学习分区表。

    展开全文
  • oracle 实现分组后排序取第一条

    万次阅读 2019-08-07 18:46:16
    1.这里要将数据按PARTNER_ID 分组并且按时间排序取第一 select * from ( SELECT ROW_NUMBER()over(PARTITION by PARTNER_ID ORDER BY VISIT_DATE DESC) as ro,v.PARTNER_ID,v.VISIT_DATE from VISIT_INFO v ...

    1.这里要将数据按PARTNER_ID 分组并且按时间排序取第一

    select * from (
    SELECT ROW_NUMBER()over(PARTITION by PARTNER_ID ORDER BY VISIT_DATE DESC) as ro,v.PARTNER_ID,v.VISIT_DATE
      from VISIT_INFO v
     where ADDRESS is not null
       and ADDRESS != ' '
    ) dual  where ro=1

     

    关于 PARTITION by 大家可以参考 https://www.cnblogs.com/cjm123/p/8033639.html 

    展开全文
  • 每天都记账,想要知道每个月账单 哪一天花费的钱最多?... first_value() 函数是指获取序列的第一条记录。last_value()获取的是序列的最后一记录。 函数定义如下: first_value {(expr [{RESPECT...
  • oracle 分组后取每组第一条数据‘数据格式 分组取第一条的效果 sql SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY x ORDER BY y DESC) rn, test ...MSSQL 分组后取每组第一条(group by order by)查询中经常...
  • select t.applicant_id, t.organ_id, t.apply_date,t.policy_id from (select r.applicant_id, r.organ_id, ... ) t where t.rn = 1 转载于:https://www.cnblogs.com/developwangzhi/p/7542858.html
  • Oracle分组取第一条数据

    千次阅读 2021-05-01 09:36:07
    对多数据进行分组排序后取每组第一条记录SELECT *FROM (SELECT ROW_NUMBER() OVER(PARTITION BY ORDER BY DESC) LEV,.*FROM )WHERE LEV = 1ORDER BY DESC -- 分组列 -- 排序列 -- 表名 -- 排序列注:.* -- 一定要有...
  • 个学生分数表student,数据结构是这样的 id(当前表ID)student_id(学生ID)line(分数)subject_type(科目类型) 11801 2...
  • 2019独角兽企业重金招聘Python工程师标准>>> select t.mcno, t.mcmqno, t.hot_port ...Oracle分组排序后取第一条 转载于:https://my.oschina.net/javawdw/blog/208257
  • 平时遇到最多的sum(),max()等等,使用group by聚合函数即可轻松解决,但是有时候我们的需求:按类别分组,按时间排序,然后获取每个分组中最新的一条。这种需求。SQL1>select t1.*,t2.nums from log_update_...
  • Oracle 分组排序取第一条

    千次阅读 2017-06-15 16:15:16
    Oracle 分组排序取第一条
  • 根据name分组根据,根据age排序取第一条数据 SELECT * FROM (SELECT p.*, row_number() over(PARTITION BY NAME ORDER BY age DESC ) rnk FROM person p)AS a WHERE rnk =1 AND a.name IN ('张三','鸡哥') ...
  • 需求:先分组,再按时间排序,最后取分组第一条 利用oracle的开窗函数可以实现 以下是模板sql ,自行替换 select t.* from (select a.*, row_number() over(partition by 需要分组的字段 order by 更新时间 ...
  • 以某个字段分组 第一条数据 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
  • select * from ( SELECT v.*, ROW_NUMBER()over(PARTITION by BALANCE_DATE,acct_id ORDER BY CREATE_TIME DESC) as ro from T_ACCT_BALANCE v where DATA_STATUS = 1 ) t where ro=1
  • oracle分组后,获取第一行数据,并按字段排序,其中可以正向排序,也可以逆向排序,正向排序order by id 默认正向排序,逆向排序order by t.start_date desc,两种排序可以同时存在,如下sql。 select t1.* from...
  • oracle 分组后取每组第一条数据

    千次阅读 2017-05-25 15:20:10
    因为项目中需要将结果集中的相同分组中的数据在组内排序然后再分别取出每个分组第一条记录,所以研究了下 ROW_NUMBER() OVER(PARTITION BY x ORDER BY y DESC) 主要思路就是根据不同分组创建一个字段进行组内...
  • 最近工作中需要联合查询几个表中的数据,并且需要分组查询并取得每个组中的最大值,使用到了个之前没有用过的oracle函数,分组排序函数。分组排序函数可以满足以下需求:1、要求取出按field1分组,并在每组中...
  • < select id = "selectRealTimeMonitorPaging" parameterType = "realTimeMonitorEntity" resultType ...1 ...1 ...1 ...1 ...1 ...1 ...1 ...partition by 以此字段为分组 order by 以此字段排序 desc ...1 ...表示取第一
  • 主要是运用到ROW_NUMBER() OVER函数 ...row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组...
  • oracle查询:取出每组中的第一条记录按type字段分组,code排序,取出每组中的第一条记录方法一:select type,min(code) from group_infogroup by type;注意:select 后面的列要在group by 子句中,或是用聚合函数包含,...
  • 目的:每组数据排序后的前N数据。 关键函数:OVER(PARTITION BY) 举例:存在实验表 test1 表中存在三列: 姓名(name)、性别(sex)、年龄(age), 数据有 男性和女性20、30、40岁,共6人, 要查询出男性年龄...
  • 一、需要实现分组排序并且组内状态优先级最高的数据有一张这样的数据表, 需求是根据error_type分组然后status最小的第一条数据第一种写法:select t.* from (select e.* from error_record e where e.status >...
  • oracle分组排序

    2021-05-01 06:23:39
    oracle 分组排序:这个麻烦:SELECT * FROM (SELECT deptno,ename,sal,ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal DESC ) Top3 FROM emp)WHERE Top3 <= 3开窗函数也ok:代码简单点:where 1=1 and ...
  • 最近有个有个业务需求(springboot项目集合mybatis):需要查询分组后每组的第一条数据(oracle数据库),可以在业务代码中实现,但是过于繁琐,后来查阅oracle的函数,得出仅仅在sql中即可实现,非常简洁,简化...
  • 场景:当我们要查询记录,需要对记录分组并且根据排序取第一条数据。 栗子: create table order(--订单表 id number, orderType varchar2(2),--订单类型 orderNo varchar2(20),--订单号 amt number(2,2),-...
  • select BOOKMARK_ID,... where BOOKMARK_TYPE IN('001','002') and CUSTOMER_ID =111111 and BOOKMARK_STATUS = 1 ) where ST =1   转载于:https://blog.51cto.com/keeplearning/1229838

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,771
精华内容 15,108
关键字:

oracle分组排序后取第一条