0
Если я использую этот SQL, я получаю это записи:Разбивка с SQL Server 2014
SELECT * FROM news WHERE
ID TITLE
---- -------
23 title 1
25 title 2
31 title 3
38 title 4
43 title 5
.... ....
178 title 69
189 title 70
Если я использую пагинацию, мой SQL будет таким:
SELECT *,
COUNT(*) OVER() AS Total,
ROW_NUMBER() OVER (ORDER BY news_date DESC, news_id DESC) AS Position
FROM news
ORDER BY news_date DESC, news_id DESC
OFFSET 5 ROW FETCH NEXT 5 ROWS ONLY;
ID TITLE TOTAL POSITION
---- ------- ------- ----------
45 title 6 70 #6
46 title 7 70 #7
48 title 8 70 #8
51 title 9 70 #9
54 title 10 70 #10
Теперь, я бы получить первые 3 и последние 3 значения и получить # 27 (например) с (# 27 + 3 И # 27-3), потому что мой идентификатор «127» (с позицией № 27). я могу сделать частичный SQL:
WITH NewsSql AS (
SELECT
*,
COUNT(*) OVER() AS Total,
ROW_NUMBER() OVER (ORDER BY new_date DESC,new_id DESC) AS Position
FROM news
)SELECT * FROM NewsSql
WHERE Position<=3 OR Position>=Total-2 OR news_id=127
ID TITLE TOTAL POSITION
---- ------- ------- ----------
23 title 1 70 #1
25 title 2 70 #2
31 title 3 70 #3
127 title 27 70 #27
175 title 68 70 #68
178 title 69 70 #69
189 title 70 70 #70
Как я могу добавить записи с позиции между # 24 и # 30?
PD: Извините за мой английский
Таким образом, вы получаете какой-то вход откуда-то, что это 27 (или 127, не ясно, что на самом деле), и что вы хотите в качестве вывода (всегда) первые 3 строки, затем строка, соответствующая вводу, плюс три строки с каждой стороны и (всегда) последние 3 строки, заключается в том, что верный? Что должно произойти, если входные данные перекрываются с первым или последним требованием? Повторяются ли строки только один раз? –
Используйте 'WHERE Position BETWEEN 24 и 30' ?? ..... –
Мой ввод будет ID-кодом (25,127, 178 ......), но мне нужна позиция для использования 'BETWEEN'. Если вход перекрывается с первым или последним запросом, показывайте только записи. На самом деле в этом нет никаких проблем. – Andynedine