我需要一个查询,它会在某个Id之前获取单个项目,并在同一个Id之后获取一个项目。
例如我有五行,id为1到5,我需要在id 3之前和之后选择id,这样我得到2和4作为结果。
有没有办法用一个查询来完成它?
编辑:
我忘了告诉说结果可能不是兄弟姐妹,而是符合标准的下一个兄弟姐妹:
SELECT routeId FROM routes WHERE routeId>::p0:: AND assetKmId<>'0'
所以下一个或上一个兄弟应该匹配assetKmId&lt;&gt;'0'(此routeId&gt; :: p0 ::当然在这种情况下无效)
答案 0 :(得分:1)
为什么不使用max,min和union结果
SELECT min(routeId) FROM routes WHERE routeId>::p0:: AND assetKmId<>'0'
UNION
SELECT max(routeId) FROM routes WHERE routeId<::p0:: AND assetKmId<>'0'
答案 1 :(得分:0)
这不会起作用吗?
SELECT * FROM :tablename
WHERE id = :yourid - 1 OR id = :yourid + 1
当然,您应该在查询中设置表名和ID参数。
答案 2 :(得分:0)
改进solomongaby的解决方案,以返回完整记录而不仅仅是ID(以防万一对您有用):
SELECT *
FROM routes
WHERE routeId = (select min(routeId) from routes where routeId >::p0::)
AND assetKmId <> '0'
UNION
SELECT *
FROM routes
WHERE routeId = (select max(routeId) from routes where routeId<::p0::)
AND assetKmId<>'0'