在 Microsoft SQL Server 2012 的内部联接中选择第 n 行

Selecting nth row in Inner Join on Microsoft SQL Server 2012

我的礼物 table 有多行符合下面的内部连接语句中的条件。我想 select 特定行(例如第 3、5 或 32 行)。我试过使用 Row_Number(),但它是一个窗口函数,需要在 select 部分内(据我所知),但随后会抛出错误,因为整个语句必须return只有一个值。

我也尝试过使用 top 然后 selecting top 的底部值(例如前 5 个然后 selecting 最后一个值),但我无法得到它工作。使用下面的语句,如何将其修改为 select 第 n 行?

update output 
set output.gift_date01 = (select gifts.gift_date
                          where
                             gifts.gift_date >= '2015-1-1 00:00:00' 
                             and gifts.gift_date  <= '2015-12-31')
from output
inner join gifts on output.donor_id = gifts.donor_id;

谢谢!

我认为如果这不是您想要做的,这会让您接近。

;WITH CTE_Gifts AS
(
    SELECT
        G.donor_id,
        G.gift_date,
        ROW_NUMBER() OVER (PARTITION BY donor_id ORDER BY gift_date) AS row_num
    FROM
        dbo.Gifts G
    WHERE
        G.gift_date BETWEEN @start_date AND @end_date
)
UPDATE O
FROM
    [Output] O   -- Should be renamed to not a reserved keyword
INNER JOIN CTE_Gifts C ON
    C.donor_id = O.donor_id AND
    C.row_num = @some_row_number