怎样在sql语句中定义上一条或下一条记录?

nebulaliang 2009-03-22 11:09:36
比方说我想查询满足某个条件的所有记录的下一条记录。例如下表
id value
1 11
2 22
3 33
4 44
5 55
假设有一个sql语句能显示第1,3条。我要怎样修改这条语句才能显示第2,4条记录?

还有一个问题。怎样对返回的结果进行统计。比方说返回了第1,2,3条记录,1出现了2次,2出现了2次,3出现了2次.要怎样才能进行这样的统计?
...全文
347 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
nebulaliang 2009-03-23
  • 打赏
  • 举报
回复
谢谢大家。不过,假如id是没有规律的呢?
十豆三 2009-03-23
  • 打赏
  • 举报
回复
Select *,Recno() As JL Into Cursor T1 From 表名
Select * From T1 Where JL In (Select JL+1 From T1 Where Value=116)

--如果你的ID就是从1开始,并连续的:
Select * From 表名 Where Id In (Select Id+1 From 表名 Where Value=116)

Select A.* From 表名 A Left Join 表名 B On A.Id=B.Id+1 Where B.Value=116
wwwwb 2009-03-23
  • 打赏
  • 举报
回复
1、假设ID是唯一标识的字段,且以小->大的顺序排序
wwwwb 2009-03-23
  • 打赏
  • 举报
回复
2
SELECT a.value,COUNT(*) FROM tth1 a ;
WHERE a.value=116 GROUP BY a.value
wwwwb 2009-03-23
  • 打赏
  • 举报
回复
1
SELECT b.* FROM tth1 a left JOIN tth1 b ON a.id=b.id-1;
WHERE a.value=116
wwwwb 2009-03-23
  • 打赏
  • 举报
回复
1、说明你的顺序,是以ID 还是 VALUE大小?
2、为什么138下是589?
nebulaliang 2009-03-23
  • 打赏
  • 举报
回复
大家没有明白我的意思,我再描述一下:
id value
1 116
2 138
3 345
4 116
5 589
7 768

我想返回值是116的下一条记录
2 138
5 589

查出值是116的记录的sql很简单,问题是怎样修改这个sql语句返回上面的结果
wwwwb 2009-03-23
  • 打赏
  • 举报
回复
1、详细说明你的要求;
2、select * from tt where id in(1,3)
select * from tt where id in(2,4)
假设ID为唯一标识的字段
3、select value,count(*) from tt group by value
十豆三 2009-03-23
  • 打赏
  • 举报
回复
问题请再描述清楚一些。
十豆三 2009-03-23
  • 打赏
  • 举报
回复
比方说我想查询满足某个条件的所有记录的下一条记录。例如下表
id value
1 11
2 22
3 33
4 44
5 55
假设有一个sql语句能显示第1,3条。我要怎样修改这条语句才能显示第2,4条记录?

那你第1,3条记录又是通过什么语句显示的?


对返回的结果进行统计
Select Id,Count(*) As 次数 From 表名 Group By Id
nebulaliang 2009-03-23
  • 打赏
  • 举报
回复
非常感谢大家!
WWWWA 2009-03-23
  • 打赏
  • 举报
回复
也可以将OCCURS->AT
WWWWA 2009-03-23
  • 打赏
  • 举报
回复
上述代码是标准的SQL解决方式,在VFP下可以简单一点
SELECT a.bh,COUNT(b.value1) FROM lsb1 a INNER JOIN ff b ON OCCURS(a.bh,b.value1)>0 GROUP BY a.bh

建立LSB1,字段BH,类型字符,内容0-9
十豆三 2009-03-23
  • 打赏
  • 举报
回复
假设你的 Value 字段为字符型,如果不是字符型请注意转换成字符型。
下面来统计查到记录中 Value 字段中数据出现的次数

Create Cursor T3 (MyNum C(1))  --建个表,内容为0-9,为了后面统计用
Insert Into T3 Values ("0")
Insert Into T3 Values ("1")
Insert Into T3 Values ("2")
Insert Into T3 Values ("3")
Insert Into T3 Values ("4")
Insert Into T3 Values ("5")
Insert Into T3 Values ("6")
Insert Into T3 Values ("7")
Insert Into T3 Values ("8")
Insert Into T3 Values ("9")

--得出某一条件Value=116的下一条记录
Select *,Recno() As JL Into Cursor T1 From 表名
Select * From T1 Where JL In (Select JL+1 From T1 Where Value=116)

--得出条件Value=116记录中的数字出现次数
Select A.MyNum,Sum(Occurs(A.MyNum,B.Value)) As 次数 From T3 A,T2 B Group By MyNum
WWWWA 2009-03-23
  • 打赏
  • 举报
回复
上述SQL语句是VFP9下的,以下的自行拆分查询,生成CURSOR再连接。
WWWWA 2009-03-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 nebulaliang 的回复:]
非常感谢!
第二个问题:我想统计的不是整个value出现的次数,而是把vaule都拆成一个字符来统计,比方查出下面两条记录
9  796
23  367
我需要统计  3出现了1次,6出现了2次,7出现了2次,9出现了1次
[/Quote]
简单,建立LSB,字段BH,类型INTEGER,内容1-30,根据
字段长度而定,SQL

SELECT newsz,COUNT(*) FROM (;
SELECT value,SUBSTR(value,bh,1) as newsz FROM (;
SELECT a.*,b.bh FROM ff a inner JOIN lsb b ON LEN(a.value)>=b.bh) a ) a1;
GROUP BY newsz
WWWWA 2009-03-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 nebulaliang 的回复:]
谢谢大家。不过,假如id是没有规律的呢?
[/Quote]
1、用自增字段;
2、用RECNO()解决。
十豆三 2009-03-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 nebulaliang 的回复:]
非常感谢!
第二个问题:我想统计的不是整个value出现的次数,而是把vaule都拆成一个字符来统计,比方查出下面两条记录
9 796
23 367
我需要统计 3出现了1次,6出现了2次,7出现了2次,9出现了1次
[/Quote]


那就将所有Value拆分后写入另一个表名,然后统计。
十豆三 2009-03-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 nebulaliang 的回复:]
谢谢大家。不过,假如id是没有规律的呢?
[/Quote]

没有规律就用我9楼前二行代码。
nebulaliang 2009-03-23
  • 打赏
  • 举报
回复
非常感谢!
第二个问题:我想统计的不是整个value出现的次数,而是把vaule都拆成一个字符来统计,比方查出下面两条记录
9 796
23 367
我需要统计 3出现了1次,6出现了2次,7出现了2次,9出现了1次
加载更多回复(1)

2,718

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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