Office中国论坛/Access中国论坛

标题: 如何从表中选出每类最大值的一条记录做更新? [打印本页]

作者: 静儿    时间: 2008-1-9 15:23
标题: 如何从表中选出每类最大值的一条记录做更新?
表1的字段:文件id    类型 .....   (文件id是主关键字)
表2的字段: id    次数   (表2id和表1文件id是一对多关系)
表2中有100条记录,共有5-15类
如何找出每类次数值最大的一条记录(每类最大次数的记录可能不止一条,但只取出一条),然后将该记录的次数值更改为0?
搞了几天都没搞出来,老出错。头都晕了,谁帮帮忙看看?
作者: rjacky    时间: 2008-1-9 15:27
应该可以,光口头说有点模糊,上传你的例子看看
作者: huangqinyong    时间: 2008-1-9 15:28
请你将实例发上来,否则,搞不清楚,无法帮你
作者: huangqinyong    时间: 2008-1-9 15:30
哈哈,riacky版主速度真快
作者: rjacky    时间: 2008-1-9 15:32
你的速度也不错呀
作者: 静儿    时间: 2008-1-9 17:02
上传例子,大家帮忙看看。
作者: huangqinyong    时间: 2008-1-9 17:19
原帖由 静儿 于 2008-1-9 17:02 发表
上传例子,大家帮忙看看。

表设计有问题,见查询3
作者: rjacky    时间: 2008-1-9 19:19
原帖由 静儿 于 2008-1-9 15:23 发表
表1的字段:文件id    类型 .....   (文件id是主关键字)
表2的字段: id    次数   (表2id和表1文件id是一对多关系)
表2中有100条记录,共有5-15类
如何找出每类次数值最大的一条记录(每类最大次数的记录可能 ...



不但楼主头晕,我也晕了,反反复复来来回回看了差不多10分钟,愣是没看明白

1、数据库里面是表1ID和表2的图片ID才是一对多关系,和你说的不一样
2、在你想要结果的演示表里面,ID和大类完全没对上号(例如ID为282的大类在表1中应该是第1类而不是第10大类)

演示数据对于别人理解你的需求是很重要的哦,等你重新整理并详细描述后,我才能帮上忙了
作者: 静儿    时间: 2008-1-10 09:21
1、数据库里面是表1ID和表2的图片ID才是一对多关系,和你说的不一样
   对,是我失误了,是图片id。
2、演示表中的id对应的是表2中的id号(因为要找出的是表2中的记录。id是表2的主关键字。)

明白了吗?
作者: 静儿    时间: 2008-1-10 09:23
原帖由 huangqinyong 于 2008-1-9 17:19 发表

表设计有问题,见查询3


没看懂。查询3的连接是错的呀?
作者: sgrshh29    时间: 2008-1-10 10:16
SELECT a.大类, Max(b.id) AS id之Max
FROM [SELECT 表1.大类, Max(表2.使用次数) AS 使用次数之Max FROM 表1 INNER JOIN 表2 ON 表1.id = 表2.图片id GROUP BY 表1.大类;]. as a INNER JOIN [SELECT 表1.大类, 表2.id, 表2.使用次数 FROM 表1 INNER JOIN 表2 ON 表1.id = 表2.图片id ]. as b ON (a.使用次数之Max = b.使用次数) AND (a.大类 = b.大类)
GROUP BY a.大类
作者: 静儿    时间: 2008-1-10 14:09
那如何将找出的这几条记录做更新查询呢?使用次数更新为0。
作者: sgrshh29    时间: 2008-1-10 14:54
因为上面给出的查询是一个不可更新的查询,所以要转个弯。
1、先把上面的查询改为生成表查询,就是第一行改为SELECT a.大类, Max(b.id) AS id INTO JINGER,其它行内容不变。
2、再做一个更新查询:UPDATE 表2 INNER JOIN JINGER ON 表2.id=JINGER.id SET 表2.使用次数 = 0;
3、然后做个宏(或者用代码)依次执行这二个查询,再执行deleteobject删除那个JINGER临时表。用的时候只要运行宏就可以了。
作者: 静儿    时间: 2008-1-10 15:50
有没有更简单一点的?
作者: sgrshh29    时间: 2008-1-10 16:07
很抱歉,想不出更简单的方法,看看其它人是否有更简洁的方法。
作者: t小宝    时间: 2008-1-10 18:07
标题: 看看这样行不行
UPDATE 表2 SET 表2.使用次数 = 0
WHERE (((表2.id) In (SELECT First(表2.id) AS id之第一条记录 FROM 表1 AS a INNER JOIN 表2 ON a.id = 表2.图片id
WHERE ((使用次数=(SELECT DISTINCT top 1 使用次数 FROM 表1 INNER JOIN 表2 ON 表1.id = 表2.图片id Where 大类=a.大类 Order By 使用次数 desc)))
GROUP BY a.大类)));

[attach]27801[/attach]




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3