如何在查询中选择总共六行的下一行和上一行,但条件为:
我总是有6行,所以如果我有:
1, 2, 3, 4, 5, 6, 7, 8, 9
我的ID是2,结果必须是:
1,3,4,5,6,7
如果我的ID为5,则结果必须为:
2,3,4,6,7,8
如果我的ID为9,则结果必须为:
3,4,5,6,7,8
编辑:
(SELECT * FROM articulos
WHERE categoria = 'Y'
AND numero >=
(SELECT IF(
(SELECT COUNT(*) FROM articulos WHERE numero < X AND categoria = 'Y')<3,
(SELECT MIN(X) FROM articulos WHERE categoria = 'Y'),
(X-3)
))
ORDER by numero ASC LIMIT 6)
UNION
(SELECT * FROM articulos
WHERE categoria = 'Y'
AND numero <=
(SELECT IF(
(SELECT COUNT(*) FROM articulos WHERE numero > 1605 AND categoria = 'Y')<3,
(SELECT MAX(X) FROM articulos WHERE categoria = 'Y'),
(X+3)
))
ORDER by numero DESC LIMIT 6)
也许这就是解决方案
答案 0 :(得分:1)
这样的事情:
SELECT data
FROM table
JOIN ( SELECT
CASE
WHEN n > MAX(id)-3 THEN MAX(id) - 7
WHEN n < 4 THEN 0
ELSE n - 4
END AS lower_bound,
CASE
WHEN n > MAX(id)-3 THEN MAX(id) + 1
WHEN n < 4 THEN 7
ELSE n + 4
END AS upper_bound
FROM table ) AS t1
WHERE id BETWEEN t1.lower_bound AND t1.upper_bound
AND id <> n
应始终选择6行
有关CASE
函数in the docs