ORACLE清除某一字段重复的数据(选取重复数据中另一个字段时期最大值)

需求:资产维修表中同一资产可能维修完继续申请维修,这时候维修状态需要根据最近的维修时间去判断维修状态,所以同一资产ID下会出现重复的数据(维修审批通过,维修审批未通过),或者可能不出现(未申请维修),所以需要查询资产维修表中未重复的数据和重复的数据中申请维修日期最近的数据,方法如下:

资产表如下:

1、资产维修中所有的数据
select * from ASSET_MAINTAIN t

结果如下:

2、资产维修中可能相同的数据
select a.*  from ASSET_MAINTAIN a inner join ASSET_MAINTAIN b on a.asset_id=b.asset_id and a.rowid!=b.rowid

结果如下:

3、查询相等的数据中保管日期最大的一条
select * from ASSET_MAINTAIN where maintain_start_date in (select max(n.maintain_start_date) from ASSET_MAINTAIN n group by n.asset_id having count(n.asset_id) > 1)

结果如下:

4、查询资产维修中所有的数据(不包括相同的数据)
select * from ASSET_MAINTAIN t where t.asset_id not in(select a.asset_id  from ASSET_MAINTAIN a inner join ASSET_MAINTAIN b on a.asset_id=b.asset_id and a.rowid!=b.rowid)

最后,将相同字段,不同数据的两个子查询相关联:

(select * from ASSET_MAINTAIN t where t.asset_id not in(select a.asset_id  from ASSET_MAINTAIN a inner join ASSET_MAINTAIN b on a.asset_id=b.asset_id and a.rowid!=b.rowid)) union all
(select * from ASSET_MAINTAIN where maintain_start_date in (select max(n.maintain_start_date) from ASSET_MAINTAIN n group by n.asset_id having count(n.asset_id) > 1))

结果如下:

时间: 2024-10-29 19:10:31

ORACLE清除某一字段重复的数据(选取重复数据中另一个字段时期最大值)的相关文章

Oracle生成查询包括对应于所有数据表记录语句中指定的字段名

应用:已知的字段名,表中的所有数据的查询数据库中包含的所有数据表的字段名 操作方法:指定字段名,用户数据库表,它可以执行以下查询 --Oracle生成查询包括对应于所有数据表记录语句中指定的字段名 declare mycolumnname VARCHAR(255):='userid';--定义要查询的字段名变量,执行前改动成您要查询的字段名myownername VARCHAR(255):='system';--定义要查询的数据库username变量,执行前改动成您要查询的数据库username

获取字符串中某一个字段的数据,GetValueFromStr

gps数据格式为:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A* /********************************************************************** *版权所有 (C)2015, Wuyq. * *文件名称: GetValueFromStr.c *内容摘要:用于演示从gps数据字符串中获取相应的内容 *其它说明:无 *当前版本: V1.0 *作

在数据表中添加一个字段的SQL语句怎么写

如果要在数据表中添加一个字段,应该如何表示呢?下面就为您介绍表添加字段的SQL语句的写法,希望可以让您对SQL语句有更深的认识. 通用式: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数 增加字段: alter table [表名] add 字段名 smallint default 0 增加数字字段,整型,缺省值为0 alter table [表名] add 字段名 int default 0 增加数字字段,长整型,缺省值为0

在数据库中加一个字段并给予排序

在数据库中加一个字段,见给数据库加字段部分的介绍 在ALL的TWIG中理性按键的类型,来增加排序功能如下:                <th>状态<br/><a class="asc" data-id="status=asc">正序</a> | <a class="desc" data-id="status=desc">倒序</a></th>

android源码中,在系统多媒体数据库中增加一个字段

由于项目需求,在系统多媒体管理数据库里的存储图像文件的表中需要新增加一个字段,源码在:项目\packages\providers\MediaProvider\MediaProvider.java下,在updateDatabase()方法里,你会发现images表格是由files创建的一个视图,于是,在files的创建里增加了一个字段,如下: .... db.execSQL("CREATE TABLE files (" + "_id INTEGER PRIMARY KEY AU

mysql 中查询一个字段是否为null的sql

查询mysql数据库表中字段为null的记录: select * 表名 where 字段名 is null 查询mysql数据库表中字段不为null的记录: select * 表名 where 字段名 is not null 例如: select * from table where column is null; select * from table where column is not null;

ACCESS中通过一个字段更新另一个字段

搞了好久的一个问题终于有结果…… 根据学生进出馆的次数和学生报名人数来分配自习间 学生报名是通过工号(学号)来报名的: 而门禁系统统计出来的数据有绝一大部分仅有 卡号没有 工号和姓名, 即便统计出来也不准啊: 各种问,各种找, 问财务,说给的卡号没有问题, 问门禁管理人员,说搞好了给我电话, 搞好几天也没有给我打电话, 据说是简单的看了下没有搞明白,当时一同事在那看见了 就这光导出日志就花了NN久.(门禁是office 2003)每次只能导60000条数据,还要等10导一次, 中间再死几次机,我

mysql 怎么通过sql语句批量去掉某一个表中某一个字段的多余字符

采用替换,把”<img src="“替换为空格," width="300" height="300" />也替换为空格,曾经在网上看到过这样的SQL,替换字段中字符串中的某些字符 update 表名 set 要修改的字段名= replace(要修改的字段名,‘<img src="’,'') update 表名 set 要修改的字段名= replace(要修改的字段名,‘width="300" hei

sql 中判断一个字段的值是空还是有值

--len(string exepress)select yunlen,* from dbo.ctm where LEN(yunlen)=0