查询选择列的第二行

时间:2015-02-27 00:49:11

标签: sql sql-server tsql

我有一个SQL语句,可能是这样的:

Amounts
$101.45
$1000.56
$20978.44
$2.98

让我这样的SQL是:

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

如何构造我的语句以便它只返回此列中的第二个值?基本上,类似于"选择列中的第二个..."该值将一直在变化,但它始终是最高值之后的值。

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

3 个答案:

答案 0 :(得分:1)

您可以使用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行,则不会返回任何内容。


使用SUBQUERY:

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

答案 1 :(得分:0)

尝试将此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行并仅返回结果集中的下一行。

答案 2 :(得分:0)

select * from table_name limit 1,1

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