-
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更多相关内容 -
Oracle中实现分组后按时间排序取第一条
2021-09-18 17:28:18②分组排序后取第一条的效果: 二、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
三、参考资料
-
ORACLE分组排序后获取第一条和最后一条值
2022-03-28 18:03:11ORACLE分组排序后获取第一条和最后一条值参考链接实践后记 参考链接 ORACLE分组排序后获取第一条和最后一条值 实践 最近遇到的sql的问题。 wx_user的手机号有部分有问题,发生了串登录。原本一个用户一个手机号,...参考链接
实践
最近遇到的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:161.这里要将数据按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
-
Oracle存储过程二 分组排序后取第一条和最后一条 first_value和last_value 不使用嵌套sql
2021-10-18 17:09:12每天都记账,想要知道每个月账单 哪一天花费的钱最多?... first_value() 函数是指获取序列的第一条记录。last_value()获取的是序列的最后一条记录。 函数定义如下: first_value {(expr [{RESPECT... -
oracle分组后取每组第一条数据
2021-05-04 01:00:08oracle 分组后取每组第一条数据‘数据格式 分组取第一条的效果 sql SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY x ORDER BY y DESC) rn, test ...MSSQL 分组后取每组第一条(group by order by)查询中经常... -
Oracle数据库,分组排序后取第一条数据
2017-09-18 14:19:00select 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 -- 分组列 -- 排序列 -- 表名 -- 排序列注:.* -- 一定要有... -
mysql/oracle分组后获取每个组排序后的第一条数据
2019-11-19 16:21:50有一个学生分数表student,数据结构是这样的 id(当前表ID)student_id(学生ID)line(分数)subject_type(科目类型) 11801 2... -
Oracle分组并排序后取第一条
2014-03-14 14:58:002019独角兽企业重金招聘Python工程师标准>>> select t.mcno, t.mcmqno, t.hot_port ...Oracle分组并排序后取第一条 转载于:https://my.oschina.net/javawdw/blog/208257 -
Oracle关于如何获取分组排序后的第一条数据
2018-04-12 09:32:13平时遇到最多的sum(),max()等等,使用group by聚合函数即可轻松解决,但是有时候我们的需求:按类别分组,按时间排序,然后获取每个分组中最新的一条。这种需求。SQL1>select t1.*,t2.nums from log_update_... -
Oracle 分组排序取第一条
2017-06-15 16:15:16Oracle 分组排序取第一条 -
Mysql和Oracle分组排序取第一条数据
2022-04-07 21:12:40根据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 分组排序取第一条数据
2020-09-08 17:08:49需求:先分组,再按时间排序,最后取分组第一条 利用oracle的开窗函数可以实现 以下是模板sql ,自行替换 select t.* from (select a.*, row_number() over(partition by 需要分组的字段 order by 更新时间 ... -
oracle 根据字段分组排序 取其第一条数据
2021-04-29 16:46:15以某个字段分组 取其第一条数据 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 -
oracle 分组排序取第一条
2021-07-23 10:31:11select * 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中分组后排序,并取第一行数据
2021-03-08 11:29:11oracle中分组后,获取第一行数据,并按字段排序,其中可以正向排序,也可以逆向排序,正向排序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中分组排序并取最大值
2021-05-01 01:09:54最近工作中需要联合查询几个表中的数据,并且需要分组查询并取得每个组中的最大值,使用到了一个之前没有用过的oracle函数,分组排序函数。分组排序函数可以满足以下需求:1、要求取出按field1分组后,并在每组中... -
Oracle 以某字段分组,以某字段排序,取第一条,加分页
2019-11-08 15:56:10< select id = "selectRealTimeMonitorPaging" parameterType = "realTimeMonitorEntity" resultType ...1 ...1 ...1 ...1 ...1 ...1 ...1 ...partition by 以此字段为分组 order by 以此字段排序 desc ...1 ...表示取第一个 -
oracle 分组后取每组第一条
2019-12-05 11:13:50主要是运用到ROW_NUMBER() OVER函数 ...row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组... -
160804、oracle查询:取出每组中的第一条记录
2021-05-08 03:45:23oracle查询:取出每组中的第一条记录按type字段分组,code排序,取出每组中的第一条记录方法一:select type,min(code) from group_infogroup by type;注意:select 后面的列要在group by 子句中,或是用聚合函数包含,... -
Oracle分组查询取每组排序后的前N条记录
2022-02-12 00:00:07目的:取每组数据排序后的前N条数据。 关键函数:OVER(PARTITION BY) 举例:存在实验表 test1 表中存在三列: 姓名(name)、性别(sex)、年龄(age), 数据有 男性和女性20、30、40岁,共6人, 要查询出男性年龄... -
MYSQL实现分组排序并取组内第一条数据
2020-12-22 01:27:20一、需要实现分组排序并且取组内状态优先级最高的数据有一张这样的数据表, 需求是根据error_type分组然后取status最小的第一条数据第一种写法:select t.* from (select e.* from error_record e where e.status >... -
oracle分组排序
2021-05-01 06:23:39oracle 分组排序:这个麻烦: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 ... -
Oracle分组,取每个分组的第一条数据
2020-07-12 12:24:02最近有个有个业务需求(springboot项目集合mybatis):需要查询分组后,取每组的第一条数据(oracle数据库),可以在业务代码中实现,但是过于繁琐,后来查阅oracle的函数,得出仅仅在sql中即可实现,非常简洁,简化... -
oracle 分组取第一条记录(易懂)
2018-09-05 10:19:50场景:当我们要查询记录,需要对记录分组并且根据排序取到第一条数据。 栗子: create table order(--订单表 id number, orderType varchar2(2),--订单类型 orderNo varchar2(20),--订单号 amt number(2,2),-... -
ORACLE 分组排序取每组的第一条记录
2013-06-26 13:54:59select 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