获取结果集的最后记录

时间:2015-07-15 04:31:54

标签: sql oracle oracle11g

以下是我用来获取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

4 个答案:

答案 0 :(得分:1)

  

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

有很多方法:

Oracle Pre-12c版本:

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

Oracle 12c版本:

  • 前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;

使用前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示例和详细说明。

答案 1 :(得分:0)

在mysql中,你可以试试这个。

SELECT * 
FROM  `table` 
ORDER BY id DESC 
LIMIT 0 , 1

答案 2 :(得分:0)

在较早的sqlserver版本(<2014)中,您没有ROW_NUMBER可供使用。

但是您可以轻松使用Top 1并按desc排序

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

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

答案 3 :(得分:-1)

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