查询以列出所有用户并首先在其上应用偏移条件,然后再使用其他过滤器

问题描述 投票:0回答:2

通过使用以下查询,我得到了不想要的结果。

select *     
from db_user 
where full_name like 'Admin%'    
order by date_created asc 
OFFSET 1 ROWS FETCH NEXT 10 ROWS ONLY;

必填结果:

  • 要获取所有用户的列表并在其上应用偏移条件,然后其他过滤器,例如(具有'fullName'和orderBy'desc')。

结果获取:

  • 首先列出所有应用过滤器的用户列表(具有'fullName'和orderBy'desc'),然后应用偏移量。

如何安排查询流程以达到所需的结果?

sql sql-server tsql sql-order-by workflow
2个回答
1
投票

您是否正在寻找类似的东西?

select u.*     
from (select u.*
      from db_user  u
      OFFSET 1 ROWS FETCH NEXT 10 ROWS ONLY
     ) u
where full_name like 'Admin%'    
order by date_created asc ;

offset不带order by的使用实际上没有任何意义。但这似乎就是您要的。


1
投票

您可以使用row_number过滤最新的记录,然后在外部查询的full_name中应用条件,进行排序和限制:

select top(10) *
from (
    select d.*, row_number() over(order by date_created desc) rn 
    from db_user 
) t
where rn > 1 and full_name like 'Admin%'
order by date_create desc

或者,使用offset

select *
from (
    select d.*, row_number() over(order by date_created desc) rn 
    from db_user 
) t
where rn > 1 and full_name like 'Admin%'
order by date_create desc
offset 0 rows fetch next 10 rows only
© www.soinside.com 2019 - 2024. All rights reserved.