在数据40万左右,排序后25万左右测试如下:

方式一(快一点):
SELECT * FROM table  WHERE  (id,createtime)  IN (SELECT id,MAX(createtime)  createtime  FROM  table  GROUP  BY  id);--获取时间最新的多条数据方式二partition by order by(慢一点)
select a.*  FROM (select *  from (select t.*,row_number() over(partition by t.id
order by t.createtime desc) rn   from table t
) c  where rn = 1) a
--性能好一点(3S)
select TASK_PROCESSINSTID,TASK_ACTIVITYDEFID,TASK_BEGINTIME,TASK_CONTROLSTATE from V_DW_BPM_TASK
WHERE (TASK_PROCESSINSTID,TASK_ACTIVITYDEFID,TASK_BEGINTIME) IN
(select TASK_PROCESSINSTID,TASK_ACTIVITYDEFID,MAX(TASK_BEGINTIME) from V_DW_BPM_TASKinner join (select PROCESSDEFINITID  --流程定义ID,ACTIVITYDEFID     --节点定义ID,VERSIONNUM        --流程版本号from BO_EU_NPD_PROCESS_NODE where IS_ANALYSIS='是') N on N.ACTIVITYDEFID = TASK_ACTIVITYDEFID AND N.PROCESSDEFINITID = TASK_PROCESSDEFIDwhere TASK_ACTIVITYTYPE = 'userTask' --统计人工活动节点 AND TASK_OWNER <> 'admin02' --admin02是默认用于系统任务创建的帐号,要排除统计AND TASK_CONTROLSTATE <> 'delete'  --删除的节点实例不做统计           GROUP  BYTASK_PROCESSINSTID,TASK_ACTIVITYDEFID
)--性能差一点(7S)
select  TASK_PROCESSINSTID, TASK_ACTIVITYDEFID, TASK_CONTROLSTATE, TASK_BEGINTIME, rnfrom (--取节点实例中最新一条状态select a.*, row_number() over(partition by TASK_PROCESSINSTID,TASK_ACTIVITYDEFID order by TASK_BEGINTIME desc) rn  from (select TASK_PROCESSINSTID,TASK_ACTIVITYDEFID,TASK_BEGINTIME,TASK_CONTROLSTATE from V_DW_BPM_TASKinner join (select PROCESSDEFINITID  --流程定义ID,ACTIVITYDEFID     --节点定义ID,VERSIONNUM        --流程版本号from BO_EU_NPD_PROCESS_NODE where IS_ANALYSIS='是') N on N.ACTIVITYDEFID = TASK_ACTIVITYDEFID AND N.PROCESSDEFINITID = TASK_PROCESSDEFIDwhere TASK_ACTIVITYTYPE = 'userTask' --统计人工活动节点 AND TASK_OWNER <> 'admin02' --admin02是默认用于系统任务创建的帐号,要排除统计AND TASK_CONTROLSTATE <> 'delete'  --删除的节点实例不做统计--AND (to_char(TASK_BEGINTIME, 'YYYYMMDD') = to_char(sysdate, 'YYYYMMDD') or to_char(TASK_ENDTIME, 'YYYYMMDD') = to_char(sysdate, 'YYYYMMDD'))) a) t  where t.rn = 1 

ORACLE-SQL性能优化-排序取第一条数据相关推荐

  1. oracle和mysql分组排序取第一条数据

    场景 需求 查每个人的Orderstr 是1 的数据,并保证name不重复 oracle select *   from (SELECT a.*, row_number() over(partitio ...

  2. oracle排序后第一条,Oracle排序取第一条数据

    Oracle需要更新套组的大单位, 规则是取第一个学员(套组ID最小)的单位信息. Oracle需要更新套组的大单位, 规则是取第一个学员(套组ID最小)的单位信息. 采用按照SUITEID排序取第一 ...

  3. Oracle去重 并按时间排序取第一条

    需求 按图所示,根据gfwtf_id 去重,并去重的条件是去最新创建的一条 第一种实现方法: select t.* from (select a.*, row_number() over(partit ...

  4. Oracle SQL性能优化的40条军规

    Oracle SQL性能优化的40条军规 1. SQL语句执行步骤 语法分析> 语义分析> 视图转换 >表达式转换> 选择优化器 >选择连接方式 >选择连接顺序 & ...

  5. Oracle根据行号达到分组排序取第一条的效果,排序后取第一条

    Oracle数据无法根据单个字段进行分组,而mysql可以,如果想要达到根据单个字段进行分组可以查询他的行号获取rowNumber达到单个字段分组取第一条效果 SELECT * FROM (SELEC ...

  6. ORACLE SQL性能优化系列 (一) black_snai

    2019独角兽企业重金招聘Python工程师标准>>> ORACLE SQL性能优化系列 (一) 原创 2003年07月21日 18:34:00 标签: oracle / sql / ...

  7. oracle 性能优化培训,ORACLE SQL性能优化(内部培训资料)

    ORACLE SQL性能优化系列 (一) 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) ...

  8. mysql分组排序取第一条记录

    方式1:内层使用DISTINCT SELECTtype,senderName,subTitle FROM(SELECT DISTINCTTYPE AS type,SENDER_USERNAME AS ...

  9. DB2数据库取第一条数据

    DB2只取第一条数据 select * from table fetch first 1 rows only

最新文章

  1. Python正则表达式初识(二)
  2. python语言学了有用吗-转行学习Python开发有什么优势
  3. 为什么「道理都懂,然而执行力差」的现象如此普遍?
  4. UIControl事件
  5. 计算机族应常喝的健康饮品
  6. python keyboard库_python利用 keyboard 库记录键盘事件
  7. Android OpenGL ES 开发教程(24):Depth Buffer
  8. 2018.02.26 9周4次课
  9. 关于_MSC_VER的说明
  10. android5.1不生成odex
  11. 【渝粤教育】国家开放大学2018年秋季 2115T人体解剖学与组织胚胎学 参考试题
  12. 用户'MYCOMPUTER\ASPNET' 登录失败”的解决方法
  13. (30)auth模块(django自带的用户认证模块)
  14. CAN网络管理Autosar(入门)
  15. AIDA64内存与缓存测试过了算稳定吗_【AMD R52600X】装机实录、基本特性介绍及性能测试...
  16. Spring Boot入门教程(三十七):支付宝集成-手机网站支付
  17. python实现qq自动点赞_python实现自动点赞
  18. Jsoncpp 使用说明
  19. Java的“跨平台”特性
  20. 《王者荣耀游戏服务器架构演进(完整版)》读后感

热门文章

  1. thinkpad 安装XP全过程
  2. 测绘技能大赛-虚拟仿真数字测图(内业部分)
  3. 20个最好的Rapidshare文件搜索引擎
  4. 我的Qt作品(17)OpenCV畸变标定,针对单张圆点图片实现畸变校正
  5. 查拉斯图拉如是说 (转)
  6. 高考十周年,为母校疯狂打Call
  7. 嵌入代码的二维码字符
  8. Win7下使用WMI获取移动磁盘序列号
  9. NULS:像组装电脑一样组装区块链?
  10. 毕业设计之 --- 目标检测-行人车辆检测流量计数