Sql 单个cte代码块的最大和最小行数

Sql 单个cte代码块的最大和最小行数,sql,sql-server,sql-server-2008,common-table-expression,Sql,Sql Server,Sql Server 2008,Common Table Expression,在上面,我得到了rn=1的所有行,但我还想将给定分区pk、pp、sn的最大rn的所有行复制到另一个表中 是否可以在不必再次使用写入cte块的情况下执行此操作 (按主键、主键、序列号顺序按id描述划分) 谢谢 您只需将另一个基于窗口函数的表达式以反向排序顺序添加到该表达式中,即可获得两个表达式的顶行 ;with cte1 as ( select id, row_number() over (partition by pk,pp,sn order by id asc) as rn from mq

在上面,我得到了rn=1的所有行,但我还想将给定分区pk、pp、sn的最大rn的所有行复制到另一个表中

是否可以在不必再次使用写入cte块的情况下执行此操作 (按主键、主键、序列号顺序按id描述划分)


谢谢

您只需将另一个基于窗口函数的表达式以反向排序顺序添加到该表达式中,即可获得两个表达式的顶行

;with cte1 as
(  select  id,
row_number() over (partition by pk,pp,sn order by id asc)
as rn
from mqms_production
) select * into #M from cte1 where rn=1

这将两次将ID返回到结果集中,除非它只有一行。但是,如果您只筛选到rn1=1,则只有一行,rn2的最大值为rn。@WesH-No,这不是问题所在。
with cte1 as (
    select  id,
        row_number() over (partition by pk,pp,sn order by id asc) as rn1,
        row_number() over (partition by pk,pp,sn order by id desc) as rn2
    from mqms_production
)
select * from cte1 
where rn1 = 1 or rn2 = 1;