2017-02-02 94 views
-1

我從表中選擇多個列,並且我需要從第二行獲取記錄中的一列。我應該如何在我的查詢中指定只有1列需要從第2行中獲取? SELECT語句返回2行,但段4我只需要返回第2行值,第1行的其他列返回值。我應該如何寫它?如何僅返回第1行的第2行記錄

select substrb(segment2,1,30) invtime 
, substrb(segment3,1,30) invoice 
, substrb(segment4,1,10) invdate 
from error_process_log; 
+2

您需要能夠明確地確定什麼是第二排的意思。數據返回的順序只能通過指定ORDER BY來保證。一旦你有了這些,獲得第二行是微不足道的,使用ROW_NUMBER()分析函數是一個很好的解決方案。 – BobC

+0

如果您使用的是oracle 12c,甚至可以使用offset子句。 SELECT * FROM TABLE ORDER BY 1 OFFSET 1 ROWS FETCH NEXT 1 ROWS ONLY。這會讓你成爲第二排。但是就像@BobC說的那樣,你需要通過某種東西來訂購。 –

回答

0

在這種情況下,您可以使用Lead()Lag()等Anlaytical函數。希望下面的插圖幫助。

SELECT SUBSTR(a.nm,1,10), 
    SUBSTR(lead(a.sn) over(order by a.sn),1,5) 
FROM 
    (SELECT 1 AS seq,'avrajit' nm,'Roy1' sn FROM dual 
    UNION ALL 
    SELECT 2 AS seq,'shubho' nm,'Roy2' sn FROM dual 
    UNION ALL 
    SELECT 3 AS seq,'papa' nm,'Roy3' sn FROM dual 
    UNION ALL 
    SELECT 3 AS seq,'romi' nm,'Roy4' sn FROM dual 
)a; 
+0

這個插圖很好,但是OP需要明白,如果沒有需要排序的東西,就沒有真正的「第二排」的有效概念。 – BobC

相關問題