以下是我用来获取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 的最后一行。这就是目标
获取结果集的最后一条记录
方法有很多:
Oracle
Pre-12c
版本:
Oracle
12c
版本:
使用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的示例和详细解释。
select * from
(
select * from table order by id desc
)
where rownum = 1
在较旧的 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 条记录
在MySQL中,您可以使用:
SELECT *
FROM `table`
ORDER BY id DESC
LIMIT 0 , 1