假设我们想要获取结果集的前1条记录.有更优雅的方式吗?
WITH temp
AS ( SELECT WKFC_CRONOLOGIA_ID
FROM SIUWKF.WKF_CRONOLOGIA c
WHERE Ogg_oggetto_id = vOGG_ID
AND TOG_TIPO_OGGETTO_ID = vTOG
AND C.WKFC_DATA_FIN = TO_DATE ('31/12/9999', 'DD/MM/YYYY')
AND Wkfc_Tipo = 'STATO'
ORDER BY WKFC_DATA_INI DESC)
SELECT WKFC_CRONOLOGIA_ID
INTO vCRONOLOGIA_ID
FROM temp
WHERE ROWNUM = 1;
Run Code Online (Sandbox Code Playgroud)
我认为你的解决方案没问题。Oracle 的唯一其他解决方案是使用row_number()分析函数,但这使其不太优雅。其他数据库也有该语句,但当您使用时,除了在子查询之外,TOP 1没有其他 Oracle 与它等效。我同意使用这使它更具可读性。下面可能会写得更快,但我不确定它是否更优雅。也许是品味问题:ROWNUMORDER BYWITH
SELECT * FROM\n( SELECT WKFC_CRONOLOGIA_ID\n FROM SIUWKF.WKF_CRONOLOGIA c\n WHERE Ogg_oggetto_id = vOGG_ID\n AND TOG_TIPO_OGGETTO_ID = vTOG\n AND C.WKFC_DATA_FIN = TO_DATE (\'31/12/9999\', \'DD/MM/YYYY\')\n AND Wkfc_Tipo = \'STATO\'\n ORDER BY WKFC_DATA_INI DESC)\nWHERE ROWNUM = 1\nRun Code Online (Sandbox Code Playgroud)\n\n这就是 Oracle SQL 手册中关于ROWNUMtop-N 报告的内容,并确认了您的做法。

源 Oracle\xc2\xae 数据库\nSQL 语言参考\n11g 版本 2 (11.2)\nE26088-01
\n