MySQL从开始选择直到row = string

时间:2014-08-27 21:01:00

标签: mysql sql

有这个表:

+----+-------+---------+-----+
| id | group | name    | age |
+----+-------+---------+-----+
| 1  | a     | John    | 11  |
+----+-------+---------+-----+
| 2  | a     | Rachel  | 12  |
+----+-------+---------+-----+
| 3  | a     | Sarah   | 11  |
+----+-------+---------+-----+
| 4  | a     | Joe     | 14  |
+----+-------+---------+-----+
| 5  | b     | Richard | 13  |
+----+-------+---------+-----+
| 6  | b     | Zoe     | 12  |
+----+-------+---------+-----+

我想编写一个查询,以便从表格{(1}})的开头获取所有值,直到id = 1,所以我得到一个这样的表:< / p>

group = 'b'

任何人都可以帮助我吗?非常感谢提前!

3 个答案:

答案 0 :(得分:2)

你会这样做一个查询:

select tt.*
from thistable tt
where tt.id < (select min(tt2.id) from thistable tt2 where tt2.`group` = 'b');

请注意,group是列名称的糟糕名称,因为它是保留字。

答案 1 :(得分:1)

如果您不知道组值并希望获得第一个值,您可以使用用户定义的变量,或者用简单的话说,您可以使用排名查询

select `id`, `group`, `name`, `age`
from (
select t.* ,
@r:= case when @g = t.`group` then @r else @r+1 end `row`,
@g:=t.`group`
from  t
cross join(select @g:='',@r:=0) t1
order by t.id , t.`group`
  ) t2
where `row` = 1

Demo

注意我已经使用表的id列对结果进行了排序,因此如果您没有连续的组记录,那么将顺序更改为

 order by  t.`group`

答案 2 :(得分:0)

好吧,如果你只想要一个sql查询看起来像这样

 Select * from myTable where group='a';