oracle 取重复数据中一条

表结构id(number)类,time(date)类,可用to_char(time,'yyyy-mm-dd')表示id不唯一,有重复,time唯一。要找出每个id最早出现... 表结构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');这样对么?不对的话应该如何写?
展开
 我来答
kaixingui2012
2015-11-09 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6452万
展开全部

操作步骤:

  1. 先按要求,针对某唯一字段,对重复数据进行分组,取max或min,结果存储到临时表

  2. 关联原表与上一步的临时表,取到相应的数据

如:

表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的最小时间列表

海子Goahead
2014-04-26 · TA获得超过310个赞
知道小有建树答主
回答量:462
采纳率:0%
帮助的人:292万
展开全部
select * from table_name a where a.rowid <=(select min(rowid) from table_name b where a.id=b.id) order by id asc;
这个语句是查询出id相同的记录,并按照id递增排序,试试看,如果有什么错误回复我。
追问
和表b有什么关系?这个语句我见过。我不用这样,我的目的只是重复的中取一条。
追答
表b还是表a只是别名,用来区分的。这个查询是查询的同一个表。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式