Rose debug info
---------------

Как пропустить несколько строк в выдаче SQL запроса

UPD. Появился кошерный способ http://ashigabutdinov.ru/2011/07/06/1/

Не понимаю, почему в MS SQL Server не придумали такой простой и очевидной вещи, как пропуск строк в SQL запросе. Ввести директиву SKIP, например. Мне нужно было вытащить последние 7 записей из выдачи, пропустив первые три. Логично же было бы сделать так:

SELECT TOP 10 SKIP 3 * FROM  cats INNER JOIN gazeta ON cats.cat_gazid = gazeta.id_gazeta INNER JOIN articles ON cats.id_cat = articles.article_catid WHERE (cats.cat_name LIKE 'Криминал' ) ORDER BY id_gazeta DESC

Но, к сожалению, SQL Server так не умеет. Вроде бы в LINQ возможно, не крутил. Окей. SQL Server умеет выбирать первые несколько записей директивой TOP N, логично было бы ввести директиву BOTTOM N для выборки последних нескольких записей:

SELECT BOTTOM 7 * FROM 
(
SELECT TOP 10 * FROM cats INNER JOIN gazeta ON cats.cat_gazid = gazeta.id_gazeta INNER JOIN articles ON cats.id_cat = articles.article_catid 
WHERE (cats.cat_name LIKE 'Криминал' ) ORDER BY id_gazeta DESC
) as TEMP

Но так SQL Server тоже не умеет! Остается еще один очевидный и работающий способ пропускать строки:

SELECT TOP 7 * FROM 
(
SELECT TOP 10 * FROM cats INNER JOIN gazeta ON cats.cat_gazid = gazeta.id_gazeta INNER JOIN articles ON cats.id_cat = articles.article_catid 
WHERE (cats.cat_name LIKE 'Криминал' ) ORDER BY id_gazeta DESC 
) as TEMP 
ORDER BY id_article ASC

Выбираем 10 верхних записей из сложного запроса, сортируем по возрастанию, выбираем верхние 7 из результатов сложного запроса.