SELECT当前行和上一行WHERE条件

时间:2015-06-11 02:32:32

标签: mysql sql

id value
---------
1 a
2 b
3 c
4 a
5 t
6 y
7 a

我想选择值为'a'的所有行及其前面的行

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

我调查了

但我想在一个查询中获取所有这些行。

请帮我开始

谢谢

1 个答案:

答案 0 :(得分: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上的索引,这甚至可能比使用变量的方法更快。