首页 > 解决方案 > oracle中的行号

问题描述

我想根据最后一个行号获取数据。

在此处输入图像描述

我想要以黄色突出显示的记录。请指导。

标签: oracle

解决方案


应该是一个简单的MAX函数。

select max(row_number) rn, 
       account_no
from your_table
group by account_no
order by account_no;

如果“row_number”表示分析函数的结果(从您到目前为止发布的内容中不清楚),则按降序将子句ORDER BY包含到函数中(我不知道您在哪一列上对数据进行排序),以便你的“最大值”实际上变成了“最小值”,然后很容易选择它作为最终结果。RN = 1

with temp as
  (select columnb, 
          columnc,
          row_number() over (partition by accountno order by SOMETHING desc) rn
                                                    ^^^^^^^^^^^^^^^^^^^^^^^
                                                    add this
   from some_table
  )
select columnb, 
       columnc
from temp
where rn = 1

因为我没有你的桌子,这里是 Scott 的 EMP:

SQL> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17.12.80        920                    20
      7499 ALLEN      SALESMAN        7698 20.02.81       1600        300         30
      7521 WARD       SALESMAN        7698 22.02.81       1250        500         30
      7566 JONES      MANAGER         7839 02.04.81       2975                    20
      7654 MARTIN     SALESMAN        7698 28.09.81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01.05.81       2850                    30
      7782 CLARK      MANAGER         7839 09.06.81       2450                    10
      7788 SCOTT      ANALYST         7566 09.12.82       3000                    20
      7839 KING       PRESIDENT            17.11.81      10000                    10
      7844 TURNER     SALESMAN        7698 08.09.81       1500          0         30
      7876 ADAMS      CLERK           7788 12.01.83       1100                    20
      7900 JAMES      CLERK           7698 03.12.81        950                    30
      7902 FORD       ANALYST         7566 03.12.81       3000                    20
      7934 MILLER     CLERK           7782 23.01.82       1300                    10

14 rows selected.

您的代码将是这样的;注意第 6 行,它按照我的建议计算行号;您将在最后一个WHERE子句(第 11 行)中使用它,同时呈现您迫切需要的“最大”行号值。

SQL> with temp as
  2    (select deptno,
  3            sal,
  4            row_number() over (partition by deptno order by sal) rn,
  5            --
  6            row_number() over (partition by deptno order by sal desc) rnd
  7     from emp
  8    )
  9  select deptno, sal, rn
 10  from temp
 11  where rnd = 1
 12  /

    DEPTNO        SAL         RN
---------- ---------- ----------
        10      10000          3
        20       3000          4
        30       2850          6

SQL>

推荐阅读