Я хочу запустить запрос «SELECT * FROM TABLE
», но выберите только из строки N+1
. Любая идея о том, как это сделать?Как пропустить первые n строк в sql-запросе
ответ
Запрос: в sql-server
declare @N int= 5 --Any random number
SELECT * FROM (
SELECT ROW_NUMBER()OVER(ORDER BY ID)AS ID
,ID
FROM TABLE_NAME
)AS tbl
WHERE ID >= @N + 1
ORDER BY tbl.ID
Это даст строки таблицы, где находится ID
начиная с @N + 1
.
Я не согласен с этим ответом, это не работает так, как вы хотите. С помощью этого решения вы не пропустите N строк, поместите N строк с идентификатором> = N –
Примечание * Этот ответ работает только в том случае, если ваш идентификатор находится в последовательном порядке и вы никогда не удаляли строку из этой таблицы. –
SQL Server:
select * from table
except
select top N * from table
Oracle:
select * from table
minus
select * from table where rownum <= N
with TableWithNum as (
select t.*, rownum as Num
from Table t
)
select * from TableWithNum where Num > N
Они могут удовлетворить ваши потребности более или менее.
Нет прямого способа сделать то, что вы хотите от SQL. Однако, на мой взгляд, это не ошибка дизайна.
SQL не должен использоваться таким образом.
В реляционных базах данных таблица представляет собой отношение, которое является набором по определению. Набор содержит неупорядоченные элементы.
Также не зависит от физического объема записей. Считывание строк не гарантируется СУРБД.
Если порядок записей является важным, лучше добавить столбец, такой как «Num» в таблицу, и использовать следующий запрос. Это более естественно.
select *
from Table
where Num > N
order by Num
ANSI SQL: «выберите * из tablename OFFSET n», а также в этом случае рекомендуется ORDER BY. – jarlh
(a) Да, хороший Ответ. См. Мой комментарий к Вопросу. (b) В последнем предложении вам не нужно * добавлять * столбец, просто «ORDER BY ...», любой столбец необходим, чтобы получить нужный результат. (c) Используйте «ЗАКАЗАТЬ».' – PerformanceDBA
насчет:
SELECT * FROM table LIMIT 50 OFFSET 1
Обратите внимание, что это не будет работать во всех вариантах SQL, поскольку ключевые слова' LIMIT' и 'OFFSET' не являются частью стандарта ANSI (см. [Этот вопрос] (http://stackoverflow.com/q/1528604/ 168775)). – eykanal
Вы хотите что-то, как в LINQ пропустить 5 и взять 10?
SELECT TOP(10) *
FROM MY_TABLE
WHERE ID not in (SELECT TOP(5) ID From My_TABLE);
Используйте это:
SELECT *
FROM Sales.SalesOrderHeader
ORDER BY OrderDate
OFFSET (@Skip) ROWS FETCH NEXT (@Take) ROWS ONLY
ПРИМЕЧАНИЕ. Этот запрос работает только на SQL Server 2012 и выше –
Для SQL2012 и более поздних версий, лучший способ @ ответ MajidBasirati в.
Я также любил ответ @ CarlosToledo, он не ограничен какой-либо версией SQL Server, но ему не хватает Order By Clauses. Без них он может вернуть неверные результаты.
Для SQL 2008 и более поздних версий я бы использовал Common Table Expressions для повышения производительности.
-- This example omits first 10 records and select next 5 records
;WITH MyCTE(Id) as
(
SELECT TOP (10) Id
FROM MY_TABLE
ORDER BY Id
)
SELECT TOP (5) *
FROM MY_TABLE
INNER JOIN MyCTE ON (MyCTE.Id <> MY_TABLE.Id)
ORDER BY Id
Для этого в SQL Server необходимо заказать запрос по столбцу, чтобы вы могли указать нужные строки.
Пример:
select * from table order by [some_column]
offset 10 rows
FETCH NEXT 10 rows only
Это работает со всеми DBRM/SQL, это стандарт ANSI:
SELECT *
FROM owner.tablename A
WHERE condition
AND n+1 <= (
SELECT COUNT(DISTINCT b.column_order)
FROM owner.tablename B
WHERE condition
AND b.column_order>a.column_order
)
ORDER BY a.column_order DESC
Закодированный оператор select выше пропускает первые n строк с большим значением в столбце_порядке. Вы можете изменить условие для получения меньшего размера, как вы хотите. – fspino
Я знаю, что это довольно поздно, чтобы ответить на запрос. Но у меня есть немного другое решение, чем у других, которые, как я считаю, имеют лучшую производительность, потому что в SQL-запросе не выполняется сравнение. Вы можете увидеть его значительное улучшение производительности в основном, когда значение SKIP достаточно велико.
Лучшая производительность, но только для SQL Server 2012 и выше. Первоначально от @Majid Basirati's answer, о котором стоит упомянуть еще раз.
DECLARE @Skip INT = 2, @Take INT = 2 SELECT * FROM TABLE_NAME ORDER BY ID ASC OFFSET (@Skip) ROWS FETCH NEXT (@Take) ROWS ONLY
Не так хорошо, как и первый, но совместим с SQL Server 2005 и выше.
DECLARE @Skip INT = 2, @Take INT = 2 SELECT * FROM ( SELECT TOP (@Take) * FROM ( SELECT TOP (@Take + @Skip) * FROM TABLE_NAME ORDER BY ID ASC ) T1 ORDER BY ID DESC ) T2 ORDER BY ID ASC
В FairCom SQL (который является псевдо-MySQL), я могу сделать это в супер простой оператора SQL, просто следующим образом:
SELECT SKIP 10 * FROM TABLE ORDER BY Id
Очевидно, что вы можете просто заменить 10
с любая заявленная переменная вашего желания.
У меня нет доступа к MS SQL или другим платформам, но я действительно удивлюсь, что MS SQL не поддерживает что-то вроде этого.
попробовать ниже запроса это работа
SELECT * FROM `my_table` WHERE id != (SELECT id From my_table LIMIT 1)
Надеется, что это поможет
- 1. Как пропустить первые N тестов в PHPUnit?
- 2. Пропустить первые N элементов в JQuery
- 3. уник пропустить первые N символов/полей
- 4. В Firebird, как собрать первые N строк?
- 5. Как удалить первые n строк в области
- 6. Haskell читает первые n строк
- 7. Запретить прокручивать первые n строк
- 8. Как выбрать первые N строк каждой группы?
- 9. Как просмотреть только первые n строк файла?
- 10. data.table - выберите первые n строк в группе
- 11. Пропустить первые пару строк при чтении строк в файле Python
- 12. Как пропустить первые N элементов с помощью CSS или jQuery?
- 13. Как эффективно пропустить первые n строк в файле с помощью python?
- 14. cqlsh: как пропустить первые несколько строк в наборе результатов
- 15. Выбрать первые N строк Кассандры таблицы
- 16. Извлечь только первые N строк трассировки стека
- 17. Как сохранить первые N строк таблицы в R в файл?
- 18. Как пропустить первые несколько строк при импорте CSV из Postgresql?
- 19. Использование python openpyxl, как пропустить первые несколько строк?
- 20. Как удалить первые n строк в строке на C#?
- 21. Как выбрать первые N строк из таблицы в T-SQL?
- 22. Как получить первые n чисел в scanf?
- 23. Как пропустить CSV-файлы, пропустить первые 5 строк и записать в консолидированный CSV
- 24. Как печатать первые n строк переменной с помощью GDB?
- 25. Как получить первые N строк, где сумма ≥ X?
- 26. PIG: Как исключить первые n строк во время загрузки
- 27. Как выбрать первые N элементов?
- 28. Проблема с n строк и пропустить m строк Entity Framework
- 29. Python Pandas reads_csv пропустить первые x и последние y строк
- 30. Удалить первые N строк в базе данных android sqlite
Какого RDBMS вы используете (f.e. Oracle, MySQL или SQL-сервер)? –
Какие dbms? «OFFSET n» - это ANSI SQL, но многие продукты dbms делают это по-своему, например. LIMIT, TOP ... – jarlh
Кроме того, если вы хотите найти строки в заданном диапазоне строк, вы можете использовать такие функции, как ['ROW_NUMBER'] (https://msdn.microsoft.com/en-us/library/ms186734 .aspx). Но это действительно зависит от ваших dbms. –