有这个表:
+----+-------+---------+-----+
| 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'
任何人都可以帮助我吗?非常感谢提前!
答案 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';