【发布时间】:2018-07-20 03:09:24
【问题描述】:
最常见/频繁/密集值
我想查找(或创建自定义)聚合函数以用于 MS Access 查询,它将返回最常见的值(即,“最常出现的项目”)按不同字段分组时。下面是我如何使用它的一个示例——但我可以想到其他示例。
样本数据:
场景:
我有每小时的天气预报数据。预测是
updated不定期,一天一次或多次,包括description喜欢 “晴天”或“阴天”(每小时变化)。“每天,每个预测中最常见的
Description是什么?(您还可以从here 以
.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 组合的“前 1”,就像这样“期望输出”:
"Ties" 需要被忽略(null 或零长度),或者理想情况下,连接成单个值,例如 cloudy, clear,每个值有 12 个该日期的记录|预测)。
“最终目标”是这样的交叉表式输出:
这将用于相当大的数据集,因此手动计算是不可能的。我可以用 VBA 完全完成它,但这需要大量的工作,所以我希望有一种方法可以创建一个 自定义聚合函数,可以在访问交叉表。
在研究解决方案时,我发现 SQL Server 可以非常简单地添加自定义聚合函数(如 this 或 this),而且 T-SQL 甚至具有可能完成这项工作的内置函数,喜欢:
DENSE_RANK,或者可能。
...所以我希望有一种方法可以在 VBA 中做类似的事情,而不必重新发明轮子。
感谢任何想法。
【问题讨论】:
标签: database ms-access subquery aggregate-functions ms-access-2016