没明白,如果是取出a最大的纪录集
select * from TableName
where a=(select max(a) from TableName)

解决方案 »

  1.   

    select * from table 
    where e in (select max(e) from table group by a)
      

  2.   

    select * from 
    (select t.*,rank() over(partition by a order by e desc) rk)
    where rk=1;
      

  3.   

    呵呵  bzszp(www.bzszp.533.net) 兄真是對PLSQL學習的很深入
    榜樣
      

  4.   

    moshangchen(内功需要修炼) :可能我原来的意思有些表达的不是很清楚,我要的是一个记录集,即同一个a字段中最大e的那组记录集如:
    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是些什么意思呢?
      

  5.   

    http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/functions2a.htm#81409有介绍分析函数
      

  6.   

    beckhambobo(beckham)  可惜英文我很不熟,而且还要注册,平常最烦的就是这个
    东东,所以还是在网上搜索搜索这个东东的用法吧。有没有其它的写法呢?
      

  7.   

    刚看到一个帖子里的,转:排列函数排列(ranking)函数。这些排列函数提供了定义一个集合(使用 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
      

  8.   

    select * from table_name
    where (a,e) in (select a,max(e) from table_name group by a)
      

  9.   

    select * from table 
    where (a,e) in (select a,max(e) from table group by a)