主题:这算不算一个疑难问题???高手请进
awei126
[专家分:0] 发布于 2003-07-26 11:29:00
我有数据表tb1,包含如下记录:
id x1 x2 x3 x4
001 1 28
001 2 20
001 3 18
002 1 9
002 3 15
002 2 6
希望得到每一个id号中包含x2最大值的新的数据表
使用:
sele id,x1,max(x2) from tb1 group by id
但结果如下
001 3 28
002 2 15
x1的值都是最后一条记录的值,请问如何使用SQL命令能得到正确的结果?
我的数据库很大,要求速度。
谢谢了!!!
回复列表 (共8个回复)
沙发
lois [专家分:80] 发布于 2003-07-25 22:59:00
id编号不可以一样的
板凳
FOX本色 [专家分:1950] 发布于 2003-07-26 15:39:00
这道是一个大问题啊
3 楼
s_tiger [专家分:5060] 发布于 2003-07-26 16:44:00
如果ID号是顺序存贮的,可以用以下的程序来实现:
local tempID, tempX2, currentID
sele tb1
tempID = id
tempX2 = x2
scan
currentID = id
if currentId = tempId
if tempX2< x2
tempX2 = x2 && 可同时记录该记录的位置信息
endif
else
tempID = currentID
将tempX2所在记录输出记录到新表中
tempX2 = x2
endif
endscan
程序结束,就这么简单,不要老想用一条语句干很多事。
编程其实不复杂。
4 楼
chl937 [专家分:0] 发布于 2005-02-15 17:09:00
sele max(x2),id,x1 from tb1 group by id 试下行不?
5 楼
s_tiger [专家分:5060] 发布于 2005-02-15 21:55:00
几个月前的老贴竟成了热贴,有趣的很。
我想了一下,先对id 和 x2排序, x2用逆序(从大到小),
再用 total on id to newtablename fields x3
6 楼
周结论 [专家分:0] 发布于 2005-03-13 17:44:00
1楼的你怎么能犯这种错误
7 楼
jiantz [专家分:0] 发布于 2005-04-06 19:43:00
sele id,x1,max(x2) from tb1 group by id having x2=max(x2)
8 楼
woodman [专家分:10] 发布于 2005-04-19 17:32:00
sele id,x2 from tb1 where x2 in (sele max(x2) from tb1)
我来回复