2015-06-11 29 views
0
id value 
--------- 
1 a 
2 b 
3 c 
4 a 
5 t 
6 y 
7 a 

我想选择的所有行值是“A”和行前选择当前和以前的行WHERE条件

id value 
--------- 
1 a 
3 c 
4 a 
6 y 
7 a 

我看着

,但我想一个查询中的所有这样的行。

请帮我开始

谢谢

回答

0

我认为最简单的方法可能是使用变量:

select t.* 
from (select t.*, 
      (rn := if(value = 'a', 1, @rn + 1) as rn     
     from table t cross join 
      (select @rn := 0) params 
     order by id desc 
    ) t 
where rn in (1, 2) 
order by id; 

另一种方法是使用相关子查询来获取先前的值,然后在where子句中使用此:

select t.* 
from (select t.*, 
      (select t2.value 
       from table t2 
       where t2.id < t.id 
       order by t2.id desc 
       limit 1 
      ) as prev_value 
     from table t 
    ) t 
where value = 'a' or prev_value = 'a'; 

使用id索引时,这可能比使用变量的方法更快。