1

我有一张桌子,我想选择价值最高的行。例如:

----------------
| user | index |
----------------
|  1   |   1   |
|  2   |   1   |
|  2   |   2   |
|  3   |   4   |
|  3   |   7   |
|  4   |   1   |
|  5   |   1   |
----------------

预期结果:

----------------
| user | index |
----------------
|  1   |   1   |
|  2   |   2   |
|  3   |   7   |
|  4   |   1   |
|  5   |   1   |
----------------

我该怎么做?我认为它可以通过一些我不知道的 oracle 函数来完成?

提前致谢 :-)

4

4 回答 4

6

您可以将MAX()功能用于分组用户列,如下所示:

  SELECT "user"
        ,MAX("index") AS "index"
    FROM Table1
GROUP BY "user"
ORDER BY "user";

结果:

| USER | INDEX |
----------------
|    1 |     1 |
|    2 |     2 |
|    3 |     7 |
|    4 |     1 |
|    5 |     1 |

看到这个 SQLFiddle

于 2013-04-30T05:13:28.537 回答
2

如果你有不止一列

select user , index
from (
  select u.* , row_number() over (partition by user order by index desc) as rnk
  from   some_table u)
where rnk = 1
  • user是一个保留字 - 您应该为该列使用不同的名称。
于 2013-04-30T06:10:24.977 回答
1
 select user,max(index) index from tbl 
 group by user;
于 2013-04-30T09:26:44.197 回答
1

或者,您可以使用分析函数:

select user,index, max(index) over (partition by user order by 1 ) highest from YOURTABLE

Note:尽量不要使用用户、索引、日期等词作为列名,因为它们是 Oracle 的保留词。如果您要使用,请将它们与引号一起使用,例如。“索引”、“日期”...

于 2013-04-30T09:40:00.317 回答