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