Как получить строки N, начинающие со строки M от отсортированной таблицы в T-SQL

Концепция реактивного программирования была введена Microsoft, затем библиотека была создана Netfilx. Здесь вы можете узнать больше о путешествии Netflix Rx

64
задан Samuel 20 April 2009 в 19:07
поделиться

6 ответов

ОБНОВЛЕНИЕ Если вы используете SQL 2012, был добавлен новый синтаксис, чтобы сделать это действительно простым. См. Реализовать функциональность подкачки (пропустить / взять) с этим запросом.

Полагаю, наиболее элегантным является использование функции ROW_NUMBER (доступно из MS SQL Server 2005):

WITH NumberedMyTable AS
(
    SELECT
        Id,
        Value,
        ROW_NUMBER() OVER (ORDER BY Id) AS RowNumber
    FROM
        MyTable
)
SELECT
    Id,
    Value
FROM
    NumberedMyTable
WHERE
    RowNumber BETWEEN @From AND @To
90
ответ дан 24 November 2019 в 15:47
поделиться

Почему бы не сделать два запроса:

select top(M+N-1) * from table into temp tmp_final with no log;
select top(N-1) * from tmp_final order by id desc;
0
ответ дан 24 November 2019 в 15:47
поделиться

Существует довольно простой метод для T-SQL , хотя я не если вы пропускаете большое количество строк, убедитесь, что это эффективно до prendanda.

SELECT TOP numberYouWantToTake 
    [yourColumns...] 
FROM yourTable 
WHERE yourIDColumn NOT IN (
    SELECT TOP numberYouWantToSkip 
        yourIDColumn 
    FROM yourTable 
    ORDER BY yourOrderColumn
)
ORDER BY yourOrderColumn

Если вы используете .Net, вы можете использовать следующее, например, для IEnumerable с вашими данными:

IEnumerable<yourDataType> yourSelectedData = yourDataInAnIEnumerable.Skip(nubmerYouWantToSkip).Take(numberYouWantToTake);

сзади, что вы получаете все данные из хранилища данных.

0
ответ дан 24 November 2019 в 15:47
поделиться

Найти идентификатор для строки N Затем получите верхние M строк с идентификатором, большим или равным этому

declare @N as int
set @N = 2
declare @M as int
set @M = 3

declare @Nid as int

set @Nid = max(id)
from
  (select top @N *
from MyTable
order by id)

select top @M *
from MyTable
where id >= @Nid
order by id

Что-то в этом роде ... но я сделал здесь некоторые предположения (например, вы хотите упорядочить по id)

0
ответ дан 24 November 2019 в 15:47
поделиться
@start = 3
@records = 2

Select ID, Value 
From
(SELECT ROW_NUMBER() OVER(ORDER BY ID) AS RowNum, ID,Value 
From MyTable) as sub
Where sub.RowNum between @start and @start+@records

Это один из способов. Есть много других, если вы Google Paging SQL.

2
ответ дан 24 November 2019 в 15:47
поделиться

Гадкий, хакерский, но сработавший:

select top(M + N - 1) * from TableName
except
select top(N - 1) * from TableName
5
ответ дан 24 November 2019 в 15:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: