获取结果集最后一条记录

问题描述 投票:0回答:4

以下是我用来获取select查询返回结果的最后一条记录的sql查询(oracle)。这是最佳方式吗?

SELECT HAZMAT_PLACARD_NOTATION
        INTO v_pcn
        FROM HAZMAT_CLASS_IRF
        WHERE HAZMAT_CD = p_stcc_cd and ROWID = (SELECT MAX(ROWID) FROM HAZMAT_CLASS_IRF WHERE HAZMAT_CD = p_stcc_cd);

以下是选择查询的示例结果集,其中 HAZMAT_CD = 4920111 但应检索具有 HAZMAT_PLAYCARD_NOTATION 值 SPONTANEOUSLY COMBUSTIBLE 的最后一行。这就是目标

enter image description here

sql oracle oracle11g
4个回答
3
投票

获取结果集的最后一条记录

方法有很多:

Oracle

Pre-12c
版本:

    子查询中的
  • ROWNUM和外部查询中的ORDER BY
  • 分析功能

Oracle

12c
版本:

  • Top-n 行限制功能

使用ROWNUM

SELECT HAZMAT_PLACARD_NOTATION
INTO v_pcn
FROM
  (SELECT HAZMAT_PLACARD_NOTATION,
    ROWNUM rn
  FROM HAZMAT_CLASS_IRF
  WHERE HAZMAT_CD = p_stcc_cd
  ORDER BY        <sort_column> DESC
  )
WHERE rn =1;

使用 Top-n 行限制功能

SELECT HAZMAT_PLACARD_NOTATION
 INTO v_pcn
  FROM HAZMAT_CLASS_IRF
  WHERE HAZMAT_CD = p_stcc_cd
  ORDER BY        <sort_column> DESC
FETCH FIRST 1 ROW ONLY;

看看这个answer的示例和详细解释。


0
投票
select * from
   ( 
     select * from table order by id desc
   )
where rownum = 1

0
投票

在较旧的 sqlserver 版本中(<2014) you don't have the ROW_NUMBER at your disposal.

但是您可以轻松使用 Top 1 并按 desc 订购

select top 1 * from tblc2scdocumentcodes where C2scDocumentCode like '%.14.%' and C2scDocumentCode like '%DTP.SO.%' order by C2scDocumentCode desc

查询返回结果集。该结果集的顺序被“颠倒”,然后限制为 1 条记录


-1
投票

在MySQL中,您可以使用:

SELECT * 
FROM  `table` 
ORDER BY id DESC 
LIMIT 0 , 1
© www.soinside.com 2019 - 2024. All rights reserved.