![](/img/trans.png)
[英]SQL Query to Select the 'Next' record (similar to First or Top N)
[英]Oracle: An elegant way to take the first n record (top-k query)
假設我們想要獲取結果集的前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;
我認為你的解決方案沒問題。 Oracle的唯一其他解決方案是使用row_number()
分析函數,但這使它不那么優雅。 其他數據庫具有TOP 1
語句,但是當您使用ORDER BY
在子查詢之外沒有其他Oracle等效於ROWNUM
。 我同意使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.