5

假设我们要获取结果集的前 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;
4

1 回答 1

1

我认为你的解决方案没问题。Oracle 的唯一其他解决方案是使用row_number()分析功能,但这使其不那么优雅。其他数据库有该TOP 1语句,但没有其他 Oracle 与它等效,而不是ROWNUM在您使用中时在子查询之外ORDER BY。我同意使用WITH它使其更具可读性。以下可能会写得更快,但我不确定它是否更优雅。也许是口味问题:

SELECT * FROM
(  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)
WHERE ROWNUM = 1

这就是 Oracle SQL 手册中关于ROWNUM前 N 个报告的内容,并确认了您执行此操作的方式。

在此处输入图像描述

源 Oracle® 数据库 SQL 语言参考 11g 第 2 版 (11.2) E26088-01

于 2012-09-18T18:04:23.447 回答