`
yuxuguang
  • 浏览: 139145 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracal取从表最大值

 
阅读更多

现在是遇到这种问题,比如两个表主表base与环节表process现在取主表base的记录和环节号最大的记录关联
   base表:
          id,
        content
   process表
          id,
          baseid,
         dealPerson,
         dealTime

现在取process表中dealPerson不为空并且id号为最大的处理记录
有两种方法:
    第一种

select base.content, process.dealPerson
  from base, process
 where base.id = process.baseid
   and process1.dealPerson is not null
   and not exists (select 1
          from process1
         where process1.baseid = process.baseid
         process1.dealPerson is not null
           and process1.id > process.id)

 
第二种:
    
select base.content, process.dealPerson
  from base,
       (select process1.baseid, process1.dealPerson
          from process1
         where process.id in
               (select max(process2.id)
                  from process2
                 where process2.dealPerson is not null)) process
 where base.id = process.baseid




前一种写法效率比较高但是条件得写两遍,如果条件比较多,以后维护起来可能比较麻烦,第二种写法效率灰常低。

 

 

第二种写法会出现的问题:

表base

字段 id,key,data

按key分组取data有最大值的记录

select *
  from base
 where base.data in
       (select max(base.data) from base group by base.key)

这样写看似没有问题,其实如果max(base.data)有与base表的非max(base.data)有相同值得情况会出现重复记录,比如郭key=a的时候data取2为最大,key=b的时候data取3为最大,并且key=b时data有值为2的情况,则会把data=2的这条记录也取出来。当然如果data没有重复记录则不会出现这样的问题

所以:正确的写法

select *
  from base
 where base.data in
       (select max(base1.data) from base base1 where base1.key = base.key group by base1.key)

 

分享到:
评论

相关推荐

    oracle 查询列最大值

    oracle 查询列最大值,例如有n例值,但是要找出这些列中的最大值。

    Oracle考试:plsql求最大值最大值.txt

    `get_maxsal_dept`是一个PL/SQL函数,设计用于从Oracle数据库中的`SCOTT.EMP`表中检索特定部门的最大薪资。此函数接受一个参数`v_deptno NUMBER`,该参数代表要查询的部门编号。函数返回类型为`NUMBER`,表示该部门...

    oracle 查询最大值 并找出最大值的相关属性

    oracle 查询最大值 并找出最大值的相关属性

    Oracle 表空间 收缩

    7. **移动对象回原表空间**:收缩完成后,再将对象从临时表空间移动回原来的表空间。 通过以上步骤,我们可以有效地缩小表空间的实际占用大小,并释放出更多的可用存储空间。这种方式不仅可以节省存储成本,还可以...

    读取oracle数据库中clob字段的值

    ### 读取Oracle数据库中CLOB字段的值 在处理Oracle数据库时,经常会遇到需要读取CLOB(Character Large Object)类型字段的情况。CLOB主要用于存储大量的文本数据,如文章、文档等内容。由于CLOB类型的数据量可能...

    创建Oracle触发器用于表中序列值自增长(Helloblock写作)

    ### 创建Oracle触发器用于表中序列值自增长 在Oracle数据库中,为了实现表中某个字段的自动递增功能,通常会使用序列(sequence)结合触发器(trigger)的方式来完成。这种方式不仅能够确保数据的一致性和完整性,...

    Oracle查询指定表的所有字段名和数据类型SQL

    1. **数据迁移**:当需要将数据从一个数据库迁移到另一个数据库时,可以通过这种方式快速获取原数据库的表结构信息,以便在新数据库中创建相应的表结构。 2. **表结构分析**:开发人员在进行数据库设计或维护时,...

    利用kettle自动创建oracle表分区

    "利用Kettle自动创建Oracle表分区" 在本篇文章中,将会介绍如何使用Kettle自动创建Oracle表分区。Oracle表分区是一种非常重要的数据库优化技术,它可以将大型表分割成多个小的独立表,从而提高查询效率和数据管理...

    oracle取最大值的三种方式,并且同时获取其它字段数据

    oracle取最大值的三种方式,并且可同时获取其它字段数据 适用于小白、对数据库不熟悉不熟练的人使用 代码有详细的注释,便于理解 纯SQL实现,下载开箱即用

    Oracle常用系统表

    以上介绍了Oracle中一些常用的系统表和视图,通过查询这些表和视图可以方便地获取数据库的各种信息,对于数据库的管理和维护非常有用。需要注意的是,不同的Oracle版本可能会有不同的系统表和视图,具体使用时需参考...

    关于oracle自带的表

    ### Oracle 自带表知识点概述 #### 一、Oracle 自带表简介 Oracle 数据库系统包含了一些预定义的表,这些表通常被称作“Oracle 自带表”。它们主要用于数据库管理和测试场景,帮助用户理解 SQL 查询的基本操作。在...

    insert和select结合实现”插入某字段在数据库中的最大值+1″的方法

    本文是mysql 数据库 问题一 将表一的数据导入表二...在表中插入数据时,某一字段取数据库中该字段的最大值,并+1,这个问题很多人都说用存储过程什么的解决,其实使用insert 和 select 结合就可以很好的解决这个问题啊

    oracle中用序列实现自动增长值

    - `CYCLE` 表示当达到最大值时,序列会重新从最小值开始;`NOCYCLE` 则表示到达边界后停止。 - `CACHE` 用于预先在内存中缓存一定数量的序列值,提高性能;`NOCACHE` 则表示每次请求时都从数据库中获取新值。 接...

    创建oracle数据库中表的主键和自增

    在这个例子中,`seq_TestID` 是一个序列名称,它从1开始,每次递增1,并且最大值设置为99999999。`NOCACHE`选项表示不会预分配序列值,这有助于减少内存使用,但可能会导致性能降低。`ORDER`选项保证了序列的唯一性...

    Oracle2表基本操作

    ### Oracle2表基本操作知识点详解 #### 一、Oracle 表的基本规则与数据类型 **1. 表名规则:** - **必须以字母开头**:表名的第一个字符必须是字母(A-Z 或 a-z)。 - **长度限制**:表名的最大长度不得超过30个...

    Oracle插入数据时获取自增ID

    - **MAXVALUE**:序列可以生成的最大值。设置为`999999999999999999`是为了确保序列有足够大的范围。 - **START WITH**:序列开始生成的第一个值。 - **INCREMENT BY**:序列每次调用增加的值。 - **NOCACHE**:这个...

    Oracle sequence 重置(失效恢复)

    这种情况通常发生在数据迁移后,原有的Sequence不再与表中的最大值相匹配,导致新记录插入时出现ID冲突或者跳号的情况。为了解决这个问题,我们需要对失效的Sequence进行重置,使其能够继续正常工作。 #### 一、...

    oracle创建表空间、表、主键、外键、序列

    MAXVALUE 最大值 CYCLE/CACHE 缓存大小; ``` 创建一个名为`EMP_SEQ`的序列,起始值为1,每次增加1: ```sql CREATE SEQUENCE EMP_SEQ START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 999999999 CYCLE; ``` 在...

    如何为oracle中的表增加自动增长列.pdf

    这里的`your_sequence_name`是序列的名字,`START WITH 1`表示序列的起始值是1,`INCREMENT BY 1`表示序列每次递增1,`NOCACHE`表示不使用缓存,以确保序列的值不会丢失,`NOCYCLE`表示序列不会循环,当达到最大值时...

    oracle表空间容量查询

    3. **自动扩展设置**:对于自动扩展的数据文件,可以通过设置最大值来避免无限制增长。 4. **优化数据存储**:合理设计表结构和索引,减少不必要的冗余数据,可以有效节省存储空间。 5. **使用压缩技术**:Oracle...

Global site tag (gtag.js) - Google Analytics