Подтвердить что ты не робот

Вернуть строку каждой n-ой записи

Как я могу вернуть каждую n-ю запись из подзапроса на основе числового параметра, который я предоставляю?

Например, у меня может быть следующий запрос:

SELECT
   Id,
   Key
FROM DataTable
WHERE CustomerId = 1234
ORDER BY Key

например

Результат подзапроса может выглядеть следующим образом:

Row Id   Key
1   1    A3231
2   43   C1212
3   243  E1232
4   765  G1232
5   2432 E2325
...
90  3193 F2312

Если я передам число 30, а набор результатов суб-запроса содержит 90 записей, я бы получил 30, 60 и 90 строк.

Если я перейду в число 40, а набор результатов содержит 90 записей, я бы получил 40-ю и 80-ю строки.

В качестве дополнительной заметки для справочной информации это используется для захвата ключа/идентификатора каждой n-й записи для элемента управления поисковым вызовом.

4b9b3361

Ответ 1

Здесь ROW_NUMBER может помочь. Для этого требуется предложение order-by, но это нормально, потому что присутствует заказ (и требуется, чтобы гарантировать определенный порядок).

SELECT t.id, t.key
FROM
(
    SELECT id, key, ROW_NUMBER() OVER (ORDER BY key) AS rownum
    FROM datatable
) AS t
WHERE t.rownum % 30 = 0    -- or % 40 etc
ORDER BY t.key

Ответ 2

Вам не нужно использовать номер строки, любое целое поле будет делать. На большинстве таблиц у нас есть поле autonumber. Для простоты я буду называть его ID. Чтобы отобразить каждую 13-ю запись:

Select ID, LastName, FirstName FROM Users WHERE ID%13 = 0 ORDER BY ID

Ответ 3

Выберите B.name из (выберите row_number() over (порядок по заказу) как row_num, A.name from (Выберите имя, 'P1', заказывая из [dbo]. [every_2nd_record]) A) B где B.row_num% 2 = 0