为Access查询创建自定义聚合函数

🏷️ 必发365手机在线登录 📅 2025-09-30 20:17:58 👤 admin 👀 1236 ❤️ 952
为Access查询创建自定义聚合函数

最常见/频繁/密集的值

我希望在MS Access查询中找到(或创建自定义的)聚合函数,该函数将返回按不同字段分组时的最常见值(即“最常出现的项”)。以下是我如何使用它的一个示例-但我想到了其他用途。

样本数据:

情境:

我有每小时的天气预报数据。预测不规则地更新,一天或多次,包括像“晴朗”或“多云”这样的描述(每小时不同)。

“每天每次预测最常见的描述是什么?”

(您也可以从此处查看或下载样本数据为 .xlsx )。

“原始”数据(选择字段):

DateTimePST updated description temperature windSpeed

2018-02-11 02:00 2018-02-06 17:53 cloudy -0.47 2.93

2018-02-11 02:00 2018-02-07 18:22 cloudy 2.09 8.92

2018-02-11 02:00 2018-02-08 22:48 rain 1.54 9.7

2018-02-11 03:00 2018-02-06 03:00 cloudy 0.13 4.31

2018-02-11 03:00 2018-02-06 17:53 cloudy -0.29 2.43

2018-02-11 03:00 2018-02-07 18:22 cloudy 1.97 5.79

2018-02-11 03:00 2018-02-08 22:48 snow 1.4 10.2

2018-02-11 04:00 2018-02-06 03:00 cloudy 0.16 4.07

2018-02-11 04:00 2018-02-06 17:53 cloudy 0.02 2.78

2018-02-11 04:00 2018-02-07 18:22 cloudy 1.89 5.54

2018-02-11 04:00 2018-02-08 22:48 snow 1.44 10.75

2018-02-11 05:00 2018-02-06 03:00 cloudy 0.14 3.83

分组:

使用类似于以下'合计'查询的方式将数据进行分组:

SELECT Int([DateTimePST]) AS DatePST, a.updated, i.description, Count(a.id) AS cnt

FROM tblWeatherData AS a

LEFT JOIN tblIconsToDesc AS i

ON a.icon = i.icon

GROUP BY Int([DateTimePST]), a.updated, i.description

ORDER BY Int([DateTimePST]), a.updated, Count(a.id) DESC;

...生成一个有序列表,显示哪些 Description 最常出现:

...但我需要仅列出每个DatePST|Updated|Description组合的最高级别的“Top 1”,类似于这个“期望输出”:

如果有"并列名次",则将其忽略(null 或零长度),或者最好将它们拼接成一个值,例如 cloudy, clear,它们在日期|预报上都有12条记录)。

最终目标是生成如下交叉表式的输出:

这将用于庞大的数据集,因此排除手动计算。我可以使用 VBA 完全完成它,但需要大量工作,因此希望有一种方法可以创建一个自定义聚合函数,可在 Access 交叉表的“值”部分中使用。

在研究解决方案时,我发现 SQL Server 很容易添加自定义聚合函数(例如 这个 或 这个),而 T-SQL 甚至有内置的函数可以完成此任务,例如:

DENSE_RANK,或者也许是。

TOP 1 WITH TIES,

...因此,我希望在 VBA 中有一种类似的方法,而无需重新发明轮子。

欢迎提出任何想法。

相关推荐

二进制、八进制、十进制、十六进制的写法标记;
365bet.com游戏奖金

二进制、八进制、十进制、十六进制的写法标记;

📅 08-18 👀 5592
DNF:不刷深渊10天获得一件95A史诗
必发365手机在线登录

DNF:不刷深渊10天获得一件95A史诗

📅 08-28 👀 2235