举个例子
有如下表id name age sex
1 刘德华 48 男
2 郭富城 47 男
3 张柏芝 25 女
4 周慧敏 46 女
5 刘德华 48 男
6 周慧敏 46 女这样:如果发现 行之间 除id之外的所有列相同,只返回一行,如果我查询这张表,应该显示四条才行,求教!
有如下表id name age sex
1 刘德华 48 男
2 郭富城 47 男
3 张柏芝 25 女
4 周慧敏 46 女
5 刘德华 48 男
6 周慧敏 46 女这样:如果发现 行之间 除id之外的所有列相同,只返回一行,如果我查询这张表,应该显示四条才行,求教!
解决方案 »
- 安装了oracle10g 后 Toad 提示oracle92的oci.dll不存在
- 求一条Sql语句,余额操作
- 在oracle中用A表數據updateB表數據的問題,請大家賜教,急!!!!!!!!!!!!!
- oracle卸载以后tns服务依然存在,1521端口仍然被占用
- 关于 并发 ,请问大家。。。
- 关于数据库碎片整理
- 【急】锁定用户为什么不行?
- OEM中作业调度的设置:能否有每天的固定一个时间点
- Oracle数据库BLOB类型--进得去,出不来
- Oracle有什么工具可以象SQL Server的跟踪器一样跟踪数据库的各种动作?
- 红旗系统 安装 oracle 10g 有经验的帮下忙
- 一个SQL归纳语句的写法
select id,name,age,sex from(
select id,name,age,sex,
row_number()over(partition by name,age,sex order by id) rn
from table_name
)
where rn=1;
已写入 file afiedt.buf 1 with tb as(
2 select 1 id,'刘德华' name, 48 age,'男' sex from dual
3 union all
4 select 2,'郭富城',47,'男' from dual
5 union all
6 select 3 ,'张柏芝',25,'女' from dual
7 union all
8 select 4 ,'周慧敏',46,'女' from dual
9 union all
10 select 5,'刘德华',48,'男' from dual
11 union all
12 select 6 ,' 周慧敏', 46,'女' from dual)
13 select min(id) id,name,age,sex
14 from tb
15 group by name,age,sex
16* order by id
SQL> / ID NAME AGE SE
---------- ------- ---------- --
1 刘德华 48 男
2 郭富城 47 男
3 张柏芝 25 女
4 周慧敏 46 女
6 周慧敏 46 女
已写入 file afiedt.buf 1 with tb as(
2 select 1 id,'刘德华' name, 48 age,'男' sex from dual
3 union all
4 select 2,'郭富城',47,'男' from dual
5 union all
6 select 3 ,'张柏芝',25,'女' from dual
7 union all
8 select 4 ,'周慧敏',46,'女' from dual
9 union all
10 select 5,'刘德华',48,'男' from dual
11 union all
12 select 6 ,'周慧敏', 46,'女' from dual)
13 select min(id) id,name,age,sex
14 from tb
15 group by name,age,sex
16* order by id
SQL> / ID NAME AGE SE
---------- ------ ---------- --
1 刘德华 48 男
2 郭富城 47 男
3 张柏芝 25 女
4 周慧敏 46 女
--我上面的SQL语句加个order by
with tb as(
select 1 id,'刘德华' name, 48 age,'男' sex from dual union all
select 2 ,'郭富城', 47,'男' from dual union all
select 3 ,'张柏芝', 25,'女' from dual union all
select 4 ,'周慧敏', 46,'女' from dual union all
select 5 ,'刘德华', 48,'男' from dual union all
select 6 ,'周慧敏', 46,'女' from dual)
select id,name,age,sex from(
select id,name,age,sex,
row_number()over(partition by name,age,sex order by id) rn
from tb
)
where rn=1 order by id;ID NAME AGE SEX
---------------------
1 刘德华 48 男
2 郭富城 47 男
3 张柏芝 25 女
4 周慧敏 46 女
2 select 1 id,'刘德华' name, 48 age,'男' sex from dual union all
3 select 2 ,'郭富城', 47,'男' from dual union all
4 select 3 ,'张柏芝', 25,'女' from dual union all
5 select 4 ,'周慧敏', 46,'女' from dual union all
6 select 5 ,'刘德华', 48,'男' from dual union all
7 select 6 ,'周慧敏', 46,'女' from dual)
8 select min(id),name,age,sex
9 from tb
10 group by name,age,sex
11 order by min(id) ;
MIN(ID) NAME AGE SEX
---------- ------ ---------- ---
1 刘德华 48 男
2 郭富城 47 男
3 张柏芝 25 女
4 周慧敏 46 女
SQL>