Как пропустить несколько строк в выдаче 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 из результатов сложного запроса.