oracle取对应多条数据中的一条的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle取对应多条数据中的一条的问题相关的知识,希望对你有一定的参考价值。
比如有表A 字段id,value 表B字段ID
A的值为
id value
1 1
2 1
2 2
3 1
表B的值为
id
1
2
3
现在取出表A中与表B关联的值(select b.id,a.value from B where b.id = a.id)
就是
1 1
2 1
2 2
3 1
现在想只取与之关联的第一条数据该如何写?
就是给出去来
1 1
2 1
3 1
from A join B on A.id=B.id
group by A.id本回答被提问者采纳
oracle 取重复数据中一条
表结构id(number)类, time(date)类,可用to_char(time,'yyyy-mm-dd')表示
id不唯一,有重复,time唯一。要找出每个id最早出现的那几行数据(几个id就有几行)
select * from table group by id having count(id)>1 order by to_char(time,'yyyy-mm-dd');这样对么?不对的话应该如何写?
操作步骤:
先按要求,针对某唯一字段,对重复数据进行分组,取max或min,结果存储到临时表
关联原表与上一步的临时表,取到相应的数据
如:
表tt结构如下:
create table tt(id number,
time date,
others .... 其它字段
);
, id不唯一,有重复,time唯一。
要找出每个id最早出现的那几行数据,有几个id就有几行输出。
分析:出现最早的数据,即time最小的数据,用min(time)来分组
SQL语句如下:
select t2.* from( select id, min(time) tm from tt group by id ) t1, tt t2
where t1.id=t2.id and t1.tm=t2.time ;
说明:子语句( select id, min(time) tm from tt group by id ) 就是得到每个id的最小时间列表
这个语句是查询出id相同的记录,并按照id递增排序,试试看,如果有什么错误回复我。追问
和表b有什么关系?这个语句我见过。我不用这样,我的目的只是重复的中取一条。
追答表b还是表a只是别名,用来区分的。这个查询是查询的同一个表。
本回答被提问者采纳以上是关于oracle取对应多条数据中的一条的问题的主要内容,如果未能解决你的问题,请参考以下文章