怎样根据一条已有的sql语句查询这条语句的上下一条数据
表:useridnameUrlsex四个字段id自动排列,name名称url地址sex性别数据:1小明第一中学男2小华第二中学男3小毛第三中学男4小雪第四中学女已有的查询...
表:user
id name Url sex 四个字段 id自动排列,name名称 url地址 sex性别
数据:
1 小明 第一中学 男
2 小华 第二中学 男
3 小毛 第三中学 男
4小雪 第四中学 女
已有的查询语句:
SELECT TOP 1 * FROM [user] WHERE sex like '男' ORDER BY [id] DESC
问题:比如我查询到第二条数据了"2 小华 第二中学 男"
要求根据这条数据(已有的sql语句)查询他的上一条数据和下一条数据
写成一条sql语句最好,总之一句话,用一条sql语句实现既查询了当前数据还查询了当前数据的上一条数据和下一条数据 展开
id name Url sex 四个字段 id自动排列,name名称 url地址 sex性别
数据:
1 小明 第一中学 男
2 小华 第二中学 男
3 小毛 第三中学 男
4小雪 第四中学 女
已有的查询语句:
SELECT TOP 1 * FROM [user] WHERE sex like '男' ORDER BY [id] DESC
问题:比如我查询到第二条数据了"2 小华 第二中学 男"
要求根据这条数据(已有的sql语句)查询他的上一条数据和下一条数据
写成一条sql语句最好,总之一句话,用一条sql语句实现既查询了当前数据还查询了当前数据的上一条数据和下一条数据 展开
2个回答
2013-09-11
展开全部
这要看你所谓的上一条数据、下一条数据和当前数据之间是否存在可明确量化的关系,比如数据库中某个字段记录了各人的考试名次:id name url sex rank1 小明 第一中学 男 4
2 小华 第二中学 男 2
3 小毛 第三中学 男 1
4 小雪 第四中学 女 3已知小华考了第2名,要找出第1名和第3名的:select * from [user] where rank=2 or rank=1 or rank=3 order by rank这样找出的记录中第二条记录是你所谓的当前数据,而第一条和第三条则分别是上一条和下一条数据。但这种情况并不适用于你所说的情况,因为按性别“男”查出的多条记录,并没有明确的可以用+1和-1(或者+n和-n)来区分其上下关系的方法(而按ID来区分是不行的,仔细想想就明白为什么)。可以这样来折中处理:rs.open "SELECT * FROM [user] WHERE sex like '男' ORDER BY id DESC",conn,1,1rs.find "name='小华'" '定位到小华这条记录......bmk=rs.bookmark '把当前记录位置保存起来
rs.moveprevious '定位到上一条记录......rs.bookmark=bmk '恢复当前记录位置
rs.movenext '定位到下一条记录
......
2 小华 第二中学 男 2
3 小毛 第三中学 男 1
4 小雪 第四中学 女 3已知小华考了第2名,要找出第1名和第3名的:select * from [user] where rank=2 or rank=1 or rank=3 order by rank这样找出的记录中第二条记录是你所谓的当前数据,而第一条和第三条则分别是上一条和下一条数据。但这种情况并不适用于你所说的情况,因为按性别“男”查出的多条记录,并没有明确的可以用+1和-1(或者+n和-n)来区分其上下关系的方法(而按ID来区分是不行的,仔细想想就明白为什么)。可以这样来折中处理:rs.open "SELECT * FROM [user] WHERE sex like '男' ORDER BY id DESC",conn,1,1rs.find "name='小华'" '定位到小华这条记录......bmk=rs.bookmark '把当前记录位置保存起来
rs.moveprevious '定位到上一条记录......rs.bookmark=bmk '恢复当前记录位置
rs.movenext '定位到下一条记录
......
推荐于2018-04-08
展开全部
查询第二条数据"2 小华 第二中学 男"的上一条数据:select * from
(
select count(*) as seq,a.ID, a.name from (select * from [user] where sex='男') a inner join (select * from [user] where sex='男') b on (a.id>=b.id) group by a.ID, a.name
) where seq in (
select seq-1 from (select count(*) as seq,a.ID, a.name from (select * from [user] where sex='男') a inner join (select * from [user] where sex='男') b on (a.id>=b.id) group by a.ID, a.name) where name='小华'
) 查询第二条数据"2 小华 第二中学 男"的下一条数据:select * from
(
select count(*) as seq,a.ID, a.name from (select * from [user] where sex='男') a inner join (select * from [user] where sex='男') b on (a.id>=b.id) group by a.ID, a.name
) where seq in (
select seq-1 from (select count(*) as seq,a.ID, a.name from (select * from [user] where sex='男') a inner join (select * from [user] where sex='男') b on (a.id>=b.id) group by a.ID, a.name) where name='小华'
) 注:Access 2003测试通过
(
select count(*) as seq,a.ID, a.name from (select * from [user] where sex='男') a inner join (select * from [user] where sex='男') b on (a.id>=b.id) group by a.ID, a.name
) where seq in (
select seq-1 from (select count(*) as seq,a.ID, a.name from (select * from [user] where sex='男') a inner join (select * from [user] where sex='男') b on (a.id>=b.id) group by a.ID, a.name) where name='小华'
) 查询第二条数据"2 小华 第二中学 男"的下一条数据:select * from
(
select count(*) as seq,a.ID, a.name from (select * from [user] where sex='男') a inner join (select * from [user] where sex='男') b on (a.id>=b.id) group by a.ID, a.name
) where seq in (
select seq-1 from (select count(*) as seq,a.ID, a.name from (select * from [user] where sex='男') a inner join (select * from [user] where sex='男') b on (a.id>=b.id) group by a.ID, a.name) where name='小华'
) 注:Access 2003测试通过
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询