没明白,如果是取出a最大的纪录集
select * from TableName
where a=(select max(a) from TableName)
select * from TableName
where a=(select max(a) from TableName)
解决方案 »
- 用EXP命令行导出数据库时,出现下面错误,是什么原因啊
- 9i里面parallel_max_servers参数的修改 在线等
- case语句在sql, pl/sql的异同点。我犯错了,希望不要误导大家。散分100
- merge into的用法
- Oracle 中 JDBC ( oci 和 thin ) 的优缺点 和 特点是什么?
- 还是关于速度。。。(10万条记录而已) 在线等待!!!
- 兄弟们快来帮忙啊,高分相赠
- 简单问题,SQL脚本改写Oracle脚本,请liuyi8903、enhydraboy、black_snail各位大虾解答,在线等待,解决马上结帖!
- 多个存储过程怎么能使它们在一个事务中运行。
- RedHat8.0 ext3文件系统支持的最大文件有限制吗,是多少?
- oracle8i数据库启动错误
- 我用pd生成的oracle数据库sql语句为什么表名、字段都有引号?
where e in (select max(e) from table group by a)
(select t.*,rank() over(partition by a order by e desc) rk)
where rk=1;
榜樣
11A0404011 3703370 [11A]F [11A]H 2
11A04040111 3652067 [11A]R [11A]A 8 2和8都是同一个a字段中最大e的字段。所以这条语句无法使用。
soniczck(城市农作物) 原来我很高兴,觉得您的语句就是我想要的,结果运行之下还是不妥,问题的原因是在我这里只是很小的一部分记录,在运行这条select max(e) from table group by a后它所得到的可能是1,2,3,4,5,6,7,8,9,连续的数字,这样取出最后的记录包括的所有的记录,还是没用。我原来3400多条记录,按您的语句运行后还是这么多记录,其实我最后要的结果应该是select max(e) from table group by a运行得到的400多条记录,要想得到正确的结果,那e字段如果不重复的话就是正确,否则错误!!!痛苦。
bzszp(www.bzszp.533.net) ,呵呵,您的语句我可是一窍不通,其实oracle我一点不熟,只是找个地方来问问这条语句怎么写,比如在acess中,我觉得的标语的sql语句应该可以搞定,这个问题应该还是一个比较经常碰到的问题,还是要说声谢谢,要不我要找些资料琢磨琢磨您 的语句?rk,rank,partition是些什么意思呢?
东东,所以还是在网上搜索搜索这个东东的用法吧。有没有其它的写法呢?
将集合内的排序方式定义为按薪水排序。 按照惯例,我们一般会将薪水高的排在前面,所以我们将指定一个对薪水的降序排序方式。下面的例子展示了这个查询的查询和输出。 select empnum, dept, salary,
rank() over (partition by dept
order by salary desc nulls last) as rank,
dense_rank() over (partition by dept order by salary desc nulls last)as denserank,
row_number() over (partition by dept order by salary desc nulls last)as rownumber
from emptab; EMPNUM DEPT SALARY RANK DENSERANK ROWNUMBER
------ ---- ------ ---- --------- ---------
6 1 78000 1 1 1
2 1 75000 2 2 2
7 1 75000 2 2 3
11 1 53000 4 3 4
5 1 52000 5 4 5
1 1 50000 6 5 6
--------------------------------------------------
9 2 51000 1 1 1
4 2 - 2 2 2
展示排序的例子 首先,让我们看一下函数调用。注意,rank 函数本身没有参数。这是因为 rank 函数不对任何参数执行任何计算。相反,rank 函数只是着眼于行集合--以及每一行在集合中的位置--正如排序方式所定义的那样。那么,我们如何为这个函数定义集合和排序方式呢?两者都是用 OVER 子句定义的。在这个例子中,因为我们要在每个部门内进行排列,因此我们通过按部门划分分区来定义集合。这样做的效果是可以确保只有那些在 dept 列具有相等值的行才参与排列。对排列函数的而言,分区(partition) 和 集合(set) 这两个术语是等价的。在 PARTITION 子句后面,我们有一个 ORDER BY 子句,这个子句定义了分区内的排序方式。在这里,我们想将高薪排在前面,因此我们将排序方式定义为降序。除了指定降序以外,我们还指定 NULLS LAST。在 SQL 中,空值排在前面,意即空值显得要大于所有其他非空的值。这就给排列带来了问题,因为我们可能并不想将为空的薪水排在前面。因此,我们使用 NULLS LAST 子句来更改默认的排序方式,这样就可以将空值排在后面了。(注意,NULLS LAST 子句是在 DB2 V7 中引入的;不过,在 V6 中使用一个 CASE 表达式来强加排序方式也是可以的。)现在,让我们看一下输出。前 6 行都是 Department 1 的雇员,每一行都被赋予一个按薪水降序排列所得的名次。注意,在 Department 1 中,有两个雇员的薪水都是 75000,这两行都被赋予第二的名次。这是因为 rank 函数提供了一种 “奥林匹克式”的排列方式,在这种方式中,两个相等的值得到相等的名次。因为有两行“结在一起,同获第二”,所以就没有排在第 3 的行。相反,接下来的一行排在第 4,因为根据排序方式,有 3 行严格地排在这一行之前。对于 Department 2,注意其中有一个行具有为空的薪水。因为我们指定了 NULLS LAST,所以这一行被排在非空行的后面。如果我们没有指定 NULLS LAST 的话,Department 2 中两行的排列顺序就要倒过来了。到现在,您可能会问自己,在上面的例子中,其他两个输出列 denserank 和 rownumber 是什么呢?DB2 实际上有三个不同的排列函数。首先是 rank 函数,它提供了奥林匹克式的排列方式,这在前面已经描述过了。其他两个函数分别是 dense_rank 和 row_number。Dense_rank 很像 rank,在这个函数中,“结”中的行排名是相等的。这两个函数惟一的不同之处在于对跟在结后面的值的处理方式,在 Dense_rank 函数中排名是按 1 递增的(而不是像 rank 函数那样按结中行的数量来递增)。因而,这里不会出现排名有间隔的现象(因此函数名中才用了“dense”)。虽然 Employee 11 的薪水在 rank 函数中获得的名次是第 4,但是 denserank 函数返回的值是 3。最后一列给出 row_number 函数的输出。Row_number 也执行一次排列,但是当碰到有结的情况时,结中的行要进行任意的(也就是说,不是确定的)排序。这在对有重复值的数据进行分析时很有用。row_number 函数一个有趣的方面是它是惟一不要求提供排序方式的排列函数。如果在没有指定排序方式的情况下调用 row_number 函数,则所有的行都将被当作结中的行来对待,因而这些行是任意排序的。这对于在输出中给行排序来说很有用。那个帖子是http://expert.csdn.net/Expert/topic/2547/2547093.xml?temp=6.954592E-02
where (a,e) in (select a,max(e) from table_name group by a)
where (a,e) in (select a,max(e) from table group by a)