如何使用 MS Access 中的从句获取 MAX 值

Posted

技术标签:

【中文标题】如何使用 MS Access 中的从句获取 MAX 值【英文标题】:How to get MAX Values using the Having Clause in MS Access 【发布时间】:2012-01-19 18:02:04 【问题描述】:

我有一个列(字段),其中包含每个实体的多个值(一对多)。

示例:一条记录​​可以引用该列中的多个值。

我想要做的是只获取此列中最高(MAX)值等于零的记录。

我做的第一件事是将列中的值转换为整数,这样我就可以得到最大值。

这是我的代码:

如何获得 Max 代码?如果一条记录有多个代码。我只想记录最大或最高代码 00000。

Having 子句出现错误,因为我无法在 Where 子句中使用 Aggregate。

SELECT CUSTOMER.USER_ID, MAX(CInt(CUSTOMER.REC_CODE)) AS ACTIVE_REC_CODE, 
CUSTOMER.CUS_TYPE


FROM CUSTOMER


WHERE ((CUSTOMER.REC_CODE) IS NOT NULL )


GROUP BY

CUSTOMER.USER_ID, CUSTOMER.REC_CODE, CUSTOMER.CUS_TYPE


HAVING  MAX(CInt([CUSTOMER.REC_CODE])= 00000 )

【问题讨论】:

我很困惑,为什么现有的select Max不适合你? 因为我不确定查询的结果集是否准确。 您说的是 00000、11111、22222、33333,但 00000 是此列表的 MIN。你想要 MAX 还是 MIN? 附加信息:基本上我正在尝试获取代码 = 00000 的记录。问题是,有些记录可以同时包含 00000、11111 等。因此,简单来说,我只想记录该代码 = 00000,仅此而已。 如果是文本,为什么不Select * From Customers Where Rec_Code=0"0000" 【参考方案1】:

您很接近,但您需要从您的WHERE 中删除CUSTOMER.REC_CODE,因为您想要该列的最大值。这应该有效:

SELECT CUSTOMER.USER_ID, MAX(CInt(CUSTOMER.REC_CODE)) AS ACTIVE_REC_CODE, CUSTOMER.CUS_TYPE
FROM CUSTOMER
WHERE CUSTOMER.REC_CODE IS NOT NULL 
GROUP BY CUSTOMER.USER_ID, CUSTOMER.CUS_TYPE
HAVING  MAX(CInt([CUSTOMER.REC_CODE])) = 0 

【讨论】:

我试过了,但我不确定它是否有效。为了确定,我想问一下:如果一条记录的REC_CODE如下:00000、11111、22222、33333,而另一个REC_CODE只有00000,上面的查询会给我两条记录,还是只给我第二条记录?跨度> 我认为您对自己想要的东西感到困惑。我编写的查询将返回所有USER_IDCUS_TYPE,它们的最大REC_CODE 为00000。 @UnaverageGuy:此查询将只返回您示例的第二行。基本上,如果您在 REC_CODE 中没有 NULL,也没有评估为负整数的值,那么这个解决方案对您来说应该足够了(我认为)。

以上是关于如何使用 MS Access 中的从句获取 MAX 值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MS Access 中保留导航弹出表单中的数据

如何在python中的字符串之间添加空格。我正在从 ms access 数据库中获取数据

从文本转移到 varchar(MAX):MS Access 有啥问题吗?

从 MS Access 中的表中获取自动编号字段值

MS Access 和 SQL 服务器之间的 Max() 行为不同

所有从 php 中的 ms access 数据库中检索数据