设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: 静儿
打印 上一主题 下一主题

[模块/函数] 如何从表中选出每类最大值的一条记录做更新?

[复制链接]
11#
发表于 2008-1-10 10:16:21 | 只看该作者
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.大类
12#
 楼主| 发表于 2008-1-10 14:09:44 | 只看该作者
那如何将找出的这几条记录做更新查询呢?使用次数更新为0。
13#
发表于 2008-1-10 14:54:27 | 只看该作者
因为上面给出的查询是一个不可更新的查询,所以要转个弯。
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临时表。用的时候只要运行宏就可以了。
14#
 楼主| 发表于 2008-1-10 15:50:34 | 只看该作者
有没有更简单一点的?
15#
发表于 2008-1-10 16:07:31 | 只看该作者
很抱歉,想不出更简单的方法,看看其它人是否有更简洁的方法。

点击这里给我发消息

16#
发表于 2008-1-10 18:07:15 | 只看该作者

看看这样行不行

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.大类)));

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-26 04:30 , Processed in 0.083787 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表