Оператор SQL для работы с базой данных Microsoft Access, которая получит 5 лучших записей, но пропустит первые 5 - PullRequest
0 голосов
/ 29 апреля 2018

enter image description here Мне нужна помощь с оператором SQL для работы с базой данных Micrsoft Access, в которой есть таблица с именем Tasks. Я хотел бы получить Топ-5 записей, но пропустить первые 5 записей. Поэтому я ищу SQL-эквивалент метода .Skip () в LINQ, который будет работать с базой данных Micrsoft Access. Мне нужно будет поместить этот запрос в строковую переменную

Dim myQuery As String
myQuery  = "Select *     "

Ответы [ 3 ]

0 голосов
/ 29 апреля 2018

Полагаю, вам нужно просто "перевернуть" сортировку в SQL Andomar:

strSelectBooks = "Select Top 5 * From (Select Top 10 * From Tasks Where Person = 'Manager' Order By ID Desc) As Tasks10 Order By ID Asc"
0 голосов
/ 29 апреля 2018

Изменение порядка не сработает, так как вы снова получите топ 5

Я думаю, что вы можете получить следующий топ-5, выполнив NOT IN первый топ-5, как в

SELECT TOP 5 *
FROM Tasks
WHERE (ID Not In 
    (SELECT TOP 5 ID FROM Tasks ORDER BY ID)
ORDER BY ID;

В VBA это будет выглядеть одинаково с продолжением строки ("_") и конкатенацией ("&")

myQuery  = "SELECT TOP 5 * FROM Tasks " & _
    "WHERE (ID Not In (SELECT TOP 5 ID FROM Tasks ORDER BY ID) " & _
    "ORDER BY ID"

РЕДАКТИРОВАНИЕ - Используйте двухэтапный запрос и временную таблицу для ускорения результатов в 100 раз

  1. Сделать таблицу tmp для хранения результатов Top 5

SELECT TOP 5 ID INTO tmpTop5 FROM Tasks ORDER BY ID;

  1. Исключить эти результаты из второго запроса Top 5

SELECT TOP 5 * FROM Tasks WHERE ID Not In (SELECT ID FROM tmpTop5) ORDER BY ID;

0 голосов
/ 29 апреля 2018

Вы можете выбрать первые 10 в подзапросе и выбрать нижние 5 из этого во внешнем запросе. Поскольку вы хотите, чтобы результат был отсортирован по ID asc, вы можете добавить еще один внешний запрос для сортировки:

select  *
from    (
        select  top (5) *
        from    (
                select  top (10) *
                from    YourTable
                order by
                        ID
                ) sub
        order by
                ID desc
        ) sub2
order by
        ID
...