2017-02-02 63 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

相关问题