例如name sex old
name1 1 10
name2 1 11
name3 2 12期望得到结果name1 1 11
name2 2 12
解释:
按照sex分组,sex=1的有两条数据,按照old倒序获得结果
name1 1 11按照sex分组,sex=2的有一条数据,按照old倒序获得结果
name2 2 12
name1 1 10
name2 1 11
name3 2 12期望得到结果name1 1 11
name2 2 12
解释:
按照sex分组,sex=1的有两条数据,按照old倒序获得结果
name1 1 11按照sex分组,sex=2的有一条数据,按照old倒序获得结果
name2 2 12
解决方案 »
- 请问在SQL语句中使用 WHERE 1>2 WHERE 1=1 这样的写法有什么作用?
- 新手学习oracle需要看哪些书籍?
- 请教一个问题---关于oracle中的nvl函数
- 这样写SQL语句查找每个公司的最新的更新时间
- 请问一下怎样通过java程序或通过shell 将数据库里面某张表的数据导出来?
- 如何删除这些表
- AIX64 下oracle OCI使用问题
- 主机名问题
- sql server 如何连接 Oralce 数据库
- 救命啊 为什么在oracle的表编辑器里能执行的update语句 在servlet里执行后老出现Exception:java.lang.NullPointerException
- oracle监听问题
- 询问关于统计信息中的直方图
select min(name) name,sex,max(old) from tab group by sex
name2 1 11
name3 2 12还是
name1 1 11
name2 2 12
name1 1 10
name2 1 11
name3 2 12期望得到结果name2 1 11
name3 2 12
解释:
按照sex分组,sex=1的有两条数据,按照old倒序获得结果
name2 1 11按照sex分组,sex=2的有一条数据,按照old倒序获得结果
name3 2 12
name1 1 10
name2 1 11
name3 2 12期望得到结果name2 1 11
name3 2 12
解释:
按照sex分组,sex=1的有两条数据,按照old倒序获得结果
name2 1 11按照sex分组,sex=2的有一条数据,按照old倒序获得结果
name3 2 12这个意思啊。
按照sex分组,sex=1的有两条数据,按照old倒序获得结果
name1 1 11按照sex分组,sex=2的有一条数据,按照old倒序获得结果
name2 2 12select name,sex,old
from (select name,sex,old,row_number() over(partition by sex order by old desc) rn
from tb) where rn=1--or
select name,sex,old
from tb a
where not exists(select 1 from tb b where a.sex=b.sex and a.old<b.old)--or
select name,sex,old
from tb a
where a.old=(select max(old) from tb b where a.sex=b.sex)--or
select name,sex,old
from tb a,(select sex,max(old) old from tb group by sex) b
where a.sex=b.sex and a.old=b.old
with tb as(
select 'name1' name,1 sex,10 old from dual union all
select 'name2', 1, 11 from dual union all
select 'name3', 2, 12 from dual)
--以上为提供数据的语句
select name,sex,old
from tb a
where not exists(select 1 from tb b where a.sex=b.sex and a.old<b.old)
NAME SEX OLD
----- ---------- ----------
name2 1 11
name3 2 12
from (select name,sex,old,row_number() over(partition by sex order by old desc) rn
from tb) where rn=1--or
select name,sex,old
from tb a
where not exists(select 1 from tb b where a.sex=b.sex and a.old<b.old)--or
select name,sex,old
from tb a
where a.old=(select max(old) from tb b where a.sex=b.sex)--or
select name,sex,old
from tb a,(select sex,max(old) old from tb group by sex) b
where a.sex=b.sex and a.old=b.old这几个。
oracle显示sql语句执行时间命了:set timing on ;SQL> set timing on;
SQL> with tb as(
2 select 'name1' name,1 sex,10 old from dual union all
3 select 'name2', 1, 11 from dual union all
4 select 'name3', 2, 12 from dual)
5 select name,sex,old
6 from tb a
7 where not exists(select 1 from tb b where a.sex=b.sex and a.old<b.old)
8 /NAME SEX OLD
----- ---------- ----------
name2 1 11
name3 2 12Executed in 0 secondsSQL> /NAME SEX OLD
----- ---------- ----------
name2 1 11
name3 2 12Executed in 0.016 secondsSQL>
select 'name1' name,1 sex,10 old from dual union all
select 'name2', 1, 11 from dual union all
select 'name3', 2, 12 from dual)
--以上为提供数据的语句
select max(name) keep(dense_rank last order by old) name,
sex,
max(old)
from tb
group by sex