我有一个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。
答案 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
是行数。