日期:2014-05-17  浏览次数:20834 次

去重复值问题
现在有张表table,有三个字段,time,name,entertime
TIME NAME ENTERTIME
------------------- ---------- -------------------
2011-11-07 00:05:21 1-4886 2011-11-06 23:39:17
2011-11-07 00:05:24 1-4886 2011-11-06 23:39:19
2011-11-07 00:05:24 1-4886 2011-11-06 23:39:19
2011-11-07 00:09:33 1-4887 2011-11-06 23:40:33
2011-11-07 00:09:33 1-4887 2011-11-06 23:40:35
  ...
如果出现上面这种情况,name 和time 都相同的情况下只取一条,
原来我是用的
select distinct time,name from table gruop name,time
但是现在需要用到entertime字段的信息,而这个字段在name和time都相同的情况下可能相同也可能不同。
想问问大家怎么实现?
TIME NAME ENTERTIME
------------------- ---------- -------------------
2011-11-07 00:05:21 1-4886 2011-11-06 23:39:17
2011-11-07 00:05:24 1-4886 2011-11-06 23:39:19
2011-11-07 00:09:33 1-4887 2011-11-06 23:40:35
  ...
oracle可不可以只根据一个字段分组来查询整个表?

------解决方案--------------------
楼主是查数据的话,下面这样就可以.
SQL code
select time,name,max(ENTERTIME) ENTERTIME ENTERTIME from table1 group by name,time;

------解决方案--------------------
SQL code
select time,name,entertime
from
(
select time,name,ENTERTIME,row_number()over(partition by time,name order by ENTERTIME desc) rn
from table1 
)
where rn=1

------解决方案--------------------
可以在分组函数后使用统计方式over(partition by 列名),这样就不需要使用group by,语句会返回所有行
SQL code
select time,name,ENTERTIME,max(ENTERTIME)over(partition by time,name) ENTERTIME rn
from table1;
--或者三楼的方式
select time,name,ENTERTIME,row_number()over(partition by time,name order by ENTERTIME desc)rn
from table1