我有一些现有代码正在使用不同的参数重复查询 SQL 数据库,我认为如果我将其更改为在开始时将一大块数据选择到 ADODB.Recordset 中,然后在循环中查询它,它可能会执行得更好记录集而不是数据库本身。
另一个警告是,当我执行这些子查询时,我需要使用聚合函数(SUM、MIN、MAX、AVG)。
对此进行编码不会太困难,但是这种显而易见的事情似乎以前已经完成了数千次,这让我想知道那里是否可能存在某种包含此类功能的开源库?我发誓几年前我遇到过一个,但无法在谷歌上找到它。
编辑:
评论中的一个好建议(由 TimW 提出)是在数据库服务器上进行所有聚合并传回客户端,然后在客户端上进行过滤。(尽管在这种情况下它不起作用,因为应用过滤的 2 个列是 DateTime 列)
更新
这是我之前遇到的库:
http ://code.google.com/p/ado-dataset-tools/
不确定作者是否放弃了它(他的计划似乎是更新它并转换为 c#),但各种库的 VBA 版本似乎在这里可用:
http ://code.google.com/p /ado-dataset-tools/source/browse/trunk/ado-recordset-unit-tests.xls?spec=svn8&r=8#ado-recordset-unit-tests.xls
我感兴趣的特定 ADO 库在这里:
http ://code.google.com/p/ado-dataset-tools/source/browse/trunk/ado-recordset-unit-tests.xls/SharedRecordSet.bas
具体参见GroupRecordSet()函数。
似乎只支持 SUM、MIN、MAX 聚合函数。
另一种可能的选择(如果在 Excel 中运行)
在 Excel VBA 中针对虚拟表编写 SQL 查询
http://www.vbaexpress.com/forum/showthread.php?t=260
不确定这将如何执行,但将原始数据(部分预聚合)拉到本地Excel 中的工作表,然后在后续查询中将该工作表用作数据源可能是一个可行的选择。