查询 select 列的第二行

Query for select 2nd row of a column

我有一个 SQL 语句,它会产生如下内容:

Amounts
1.45
00.56
978.44
.98

让我得到这个的 SQL 是:

select CHANGE_EFFECTIVE_AMOUNT
from V_Rpt
where ACCOUNT_NUMBER = '100'
and CHANGE_TYPE_CODE = 2
order by TRAN_SEQUENCE_NUMBER desc

如何构建我的语句,使其仅 returns 此列中的第二个值?基本上,类似 "select the 2nd in a column from..." 的值会一直变化,但它始终是最高值之后的值。

我正在使用 Microsoft SQL Server 2008 R2,以防万一。而且,这最终将作为传递查询进入 MS Access 2007。

您可以使用 ROW_NUMBER() 函数实现此目的。

;WITH CTE AS(
    SELECT 
        CHANGE_EFFECTIVE_AMOUNT,
        RN = ROW_NUMBER() OVER(ORDER BY TRAN_SEQUENCE_NUMBER DESC)
    FROM V_Rpt
    WHERE 
        ACCOUNT_NUMBER = '100'
        AND CHANGE_TYPE_CODE = 2
)
SELECT CHANGE_EFFECTIVE_AMOUNT
FROM CTE
WHERE RN = 2

如果您的查询只有 1 行,这 return 什么也不会。


使用子查询:

SELECT
    t.CHANGE_EFFECTIVE_AMOUNT
FROM(
    SELECT 
        CHANGE_EFFECTIVE_AMOUNT,
        RN = ROW_NUMBER() OVER(ORDER BY TRAN_SEQUENCE_NUMBER DESC)
    FROM V_Rpt
    WHERE 
        ACCOUNT_NUMBER = '100'
        AND CHANGE_TYPE_CODE = 2
)t
WHERE t.RN = 2

尝试将此 OFFSET 1 ROW FETCH NEXT 1 ROW ONLY 添加到您的查询中。

  select CHANGE_EFFECTIVE_AMOUNT
    from V_Rpt
    where ACCOUNT_NUMBER = '100'
    and CHANGE_TYPE_CODE = 2
    order by TRAN_SEQUENCE_NUMBER desc OFFSET 1 ROW
    FETCH NEXT 1 ROW ONLY;

OFFSET 跳过 1 行,return 仅跳过结果集中的下一行。

select * from table_name limit 1,1

因为 limit x,y x 是起始行的索引,y 是行数。