Sql server 如何选择具有内部联接的最后一行的第二行?

Sql server 如何选择具有内部联接的最后一行的第二行?,sql-server,Sql Server,我是SQL server查询的初学者,我练习查询,在选择最后第二行时遇到困难这是我的查询代码 选择 前1名* 从选择 前2名* 来自样本ms 内连接样本1 s1 在s1.MemberId=ms.MemberId上 内部连接样本2 s2 在s2.MemberId=s1.MemberId上 内部连接样本3 s3 在s3.MemberId=s2.MemberId上 其中,ms.MemberId='001'和s1.creationdate=s3.transactiondate按s2排序。[交易编号]d

我是SQL server查询的初学者,我练习查询,在选择最后第二行时遇到困难这是我的查询代码

选择 前1名* 从选择 前2名* 来自样本ms 内连接样本1 s1 在s1.MemberId=ms.MemberId上 内部连接样本2 s2 在s2.MemberId=s1.MemberId上 内部连接样本3 s3 在s3.MemberId=s2.MemberId上 其中,ms.MemberId='001'和s1.creationdate=s3.transactiondate按s2排序。[交易编号]descx 按s2排序。[tran_Number]只需使用行编号,然后保留第二条记录以及当前使用的内部排序记录

SELECT *
FROM
(
    SELECT
        ms.MemberId,
        ms.col1,
        s1.col2,
        s2.col3,
        ROW_NUMBER() OVER (ORDER BY s2.[tran_Number] DESC) rn
    FROM MemberSample ms 
    INNER JOIN sample1 s1
        ON s1.MemberId = ms.MemberId
    INNER JOIN sample2 s2
       ON s2.MemberId = s1.MemberId
    INNER JOIN sample3 s3
        ON s3.MemberId = s2.MemberId
    WHERE
        ms.MemberId = '001' AND
        s1.creationdate = s3.transactiondate
) t
where t.rn = 2;
我猜测您想要选择哪些列,但不要使用select*,而只是列出您想要的列


请注意,如果关系可能是一个问题,那么我们可能需要重新考虑这一点,并使用秩函数来代替。

t部分中的Hi有一条弯曲的线,但我仍然运行它以了解错误,因此消息是,列“MemberId”已为“t”指定多次。@KeyBirdPadilla如果可以避免,请不要使用SELECT*。只需列出您要选择的确切列。错误是由于来自不同表的多个列(称为MemberId)引起的。有任何方法可以自动选择最后一个第二行原始数据,因为我要选择最后一个第二行事务。如果我的初始答案不起作用,则它不起作用。列出列有什么问题?不管怎么说,您有名称冲突,从报告的角度来看,这不是一件可取的事情。您好,最后一个问题,我如何选择所有成员的所有最后一个事务