Запросить список всех пользователей и применить к нему условие смещения, а затем другие фильтры. - PullRequest
0 голосов
/ 27 февраля 2020

С помощью запроса ниже я получаю нежелательные результаты.

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

Требуемые результаты:

  • Чтобы получить список всех пользователей и сначала применить к нему условие смещения, а затем другие фильтры, такие как (имеющие 'fullName' и orderBy 'des c').

Получение результатов:

  • Список всех пользователей, в первую очередь с примененными фильтрами (с 'fullName') и orderBy 'des c'), а затем смещение применяется.

Как организовать поток запросов для достижения требуемого результата?

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Вы ищете что-то подобное?

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

Использование offset без order by на самом деле не имеет смысла. Но это кажется тем, о чем вы просите.

1 голос
/ 27 февраля 2020

Вы можете отфильтровать самую последнюю запись с 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
...