以下是我用来获取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的最后一行。这是目标
答案 0 :(得分:1)
获取结果集的最后一条记录
有很多方法:
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;
使用前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