0

鉴于此表:

Col1-Col2
85 - 2
95 - 4
46 - 3
79 - 6
11 - 5
13 - 1

要求是我希望系统一次检查每一行,如果它看到 col2 = 3 或 col2 = 1,那么它将停止并返回中间值。

例如:当用户输入“85”时,它将查看下一条记录“95”(col2=4 而不是 3 或 1)然后它会查看下一条记录“46”(col2=3)然后它将中断并返回之间。

Col1-Col2
95 - 4

Ex2:当用户搜索“46”时,它将显示 2 个边界之间的 (46 - 3) & (13 - 1):

Col1-Col2
79 - 6
11 - 5

我认为最简单的代码是在 mysql 中使用用户定义的变量,如下所示:

select @pv:=col1, col2 from Table1 
where @pv=85

但是这段代码不起作用。我搜索了整个互联网,但找不到类似的问题。

谁能帮我?如果您可以在 sql fiddle ( http://sqlfiddle.com/#!2/24b1f/3 ) 中修改查询,那就太好了。

4

1 回答 1

2

你真的应该用一个存储过程和一个游标来解决这个问题。

但是,在 SQL 中也可以,但很难阅读。这是您的第一个示例

select col1, col2 from
(select col1, 
       col2, 
       if(col2 in (1,3) and @row = 1,@row:=@row+1, @row) as end,
       if(col1 = 85 and @row = 0,@row:=1,@row) as start       
  from Table1
  join (select @row := 0 from dual) dummy) as magic
where end = 1;

http://sqlfiddle.com/#!2/24b1f/23

于 2013-06-18T08:55:13.013 回答