怎样取出这样一段数据?

boing2000 2008-02-05 12:30:40
id layer name
1 1 aa
2 2 bb
4 3 cc
3 4 dd
5 6 aa1
6 3 bb1
7 2 cc1
8 3 dd1
9 4 ee1
10 5 ff1
11 2 11
12 2 22
13 3 33

用什么语句能取出id=4的layer值为3时,从layer的值3到下一个layer>=3时这中间的数据出来,如下表:
4 3 cc
3 4 dd
5 6 aa1
6 3 bb1
(ID=7的时候,layer=2时小于3了就终止取数据了)

当id=8,layer=3取出的数据如下:
8 3 dd1
9 4 ee1
10 5 ff1
(到id=11时,layer的值小于3了)

也就是按id排序取的数据当从layer=4值开始时一直到值还是>=4的时候列出来的数据,
...全文
132 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
boing2000 2008-02-06
  • 打赏
  • 举报
回复
2楼的那个结束ID方法给了我灵感,谢谢!
3楼的方法有点复杂,不太理解,不过测试结果正确!谢谢!
XFliangwh 2008-02-05
  • 打赏
  • 举报
回复
我只会用存储过程实现这个了。

用游标读。
liuyann 2008-02-05
  • 打赏
  • 举报
回复
select c.id, c.layer,c.name
from table3 c,
(
select a.id,min(b.id) as maxID
from table3 b,
(
select id,layer
from table3
where id=4 --the number you need // liuyann
) a
where b.id>a.id and b.layer<a.layer
group by a.id
) d
where c.id >=d.id and c.id<d.maxid


source
id  layer   name
1 1 aa
2 2 bb
3 4 dd
4 3 cc
5 6 aa1
6 3 bb1
7 2 cc1
8 3 dd1
9 4 ee1
10 5 ff1
11 2 11
12 2 22
13 3 33


id=4
id  layer   name
4 3 cc
5 6 aa1
6 3 bb1



id=8
id  layer   name
8 3 dd1
9 4 ee1
10 5 ff1
tim_spac 2008-02-05
  • 打赏
  • 举报
回复
1 开始的id:
select id from tab where layer=3 and id=4

2 结束的id:
select id=min(id) from tab where layer=3 and id>4

3 结果集:
declare @id int,@layer int
select @id=4 , @layer=3 -- 要查询的参数
select *
from tab
where 1=1
and id >= (select id from tab where layer=@layer and id=@id) /*开始的id*/
and id <= (select id=min(id) from tab where layer=@layer and id>@id) /*结束的id*/

57,062

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧