【发布时间】:2019-08-16 16:26:04
【问题描述】:
我正在尝试构建一个查询来计算网球运动员在特定比赛记录之前参加的比赛(记录)的数量。以下是主 Matches 表的示例:
+-----------------------+------------------------+-----------------------+------------+-------------------+-----------+
| ID1_G | ID2_G | ID_T_G | ID_R_G | RESULT_G | DATE_G |
+-----------------------+------------------------+-----------------------+------------+-------------------+-----------+
| Patrick Davidson | Darren K. Polkinghorne | Launceston Challenger | q-Second | 4-6 7-5 7-5 | 07-Feb-15 |
| Tennys Sandgren | David Barclay | Launceston Challenger | q-Second | 6-0 6-3 | 07-Feb-15 |
| Gavin Van Peperzeel | Alexander Klintcharov | Launceston Challenger | q-Second | 6-1 4-6 6-1 | 07-Feb-15 |
| Yuichi Sugita | Daniel Groom | Launceston Challenger | q-Second | 6-0 6-3 | 07-Feb-15 |
| Omar Jasika | Daniel Nolan | Launceston Challenger | q-Second | 6-1 6-4 | 07-Feb-15 |
| Finn Tearney | Christian Trubrig | Launceston Challenger | q-Second | 7-6(2) 6-0 | 07-Feb-15 |
| Alexander Sarkissian | Issei Okamura | Launceston Challenger | q-Second | 6-1 6-1 | 07-Feb-15 |
| Jacob Grills | Stefanos Tsitsipas | Launceston Challenger | q-Second | 6-4 1-6 6-0 | 07-Feb-15 |
| Finn Tearney | Alexander Sarkissian | Launceston Challenger | Qualifying | 6-4 5-7 6-4 | 08-Feb-15 |
| Yuichi Sugita | Tennys Sandgren | Launceston Challenger | Qualifying | 4-6 6-4 6-2 | 08-Feb-15 |
| Gavin Van Peperzeel | Patrick Davidson | Launceston Challenger | Qualifying | 6-3 7-6(2) | 08-Feb-15 |
| Omar Jasika | Jacob Grills | Launceston Challenger | Qualifying | 6-1 7-6(6) | 08-Feb-15 |
| Benjamin Mitchell | Maverick Banes | Launceston Challenger | First | 6-4 6-2 | 09-Feb-15 |
| Mitchell Krueger | Omar Jasika | Launceston Challenger | First | 6-3 4-6 6-3 | 09-Feb-15 |
| Ze Zhang | Alex Bolt | Launceston Challenger | First | 6-4 6-4 | 09-Feb-15 |
| Bjorn Fratangelo | Blake Mott | Launceston Challenger | First | 6-2 6-4 | 09-Feb-15 |
| Christopher O'Connell | Somdev Devvarman | Launceston Challenger | First | 6-2 6-1 | 09-Feb-15 |
| Brydan Klein | Sanam Singh | Launceston Challenger | First | 7-6(5) 6-7(2) 6-2 | 09-Feb-15 |
| Jordan Thompson | Yuuya Kibi | Launceston Challenger | First | 6-3 3-6 7-5 | 09-Feb-15 |
| Harry Bourchier | Hiroki Moriya | Launceston Challenger | First | 6-1 7-6(10) | 09-Feb-15 |
| Bradley Klahn | Matthew Ebden | Launceston Challenger | First | 6-0 6-4 | 10-Feb-15 |
| Hyeon Chung | Matt Reid | Launceston Challenger | First | 3-6 7-5 7-5 | 10-Feb-15 |
| Radu Albot | Di Wu | Launceston Challenger | First | 6-4 6-3 | 10-Feb-15 |
| Matthew Barton | Kyle Edmund | Launceston Challenger | First | 3-6 6-3 2-0 ret. | 10-Feb-15 |
| Dayne Kelly | Gavin Van Peperzeel | Launceston Challenger | First | 6-2 3-6 6-2 | 10-Feb-15 |
| Yuichi Sugita | Marc Polmans | Launceston Challenger | First | 6-4 4-6 6-3 | 10-Feb-15 |
| Jose Statham | Finn Tearney | Launceston Challenger | First | 7-5 6-3 | 10-Feb-15 |
| Luke Saville | Andrew Whittington | Launceston Challenger | First | 5-7 6-4 6-0 | 10-Feb-15 |
| Jordan Thompson | Luke Saville | Launceston Challenger | Second | 6-4 6-4 | 11-Feb-15 |
| Harry Bourchier | Brydan Klein | Launceston Challenger | Second | 2-6 7-6(5) 6-4 | 11-Feb-15 |
| Benjamin Mitchell | Christopher O'Connell | Launceston Challenger | Second | 3-6 6-3 6-4 | 11-Feb-15 |
| Hyeon Chung | Mitchell Krueger | Launceston Challenger | Second | 4-6 6-3 6-4 | 11-Feb-15 |
| Bradley Klahn | Dayne Kelly | Launceston Challenger | Second | 5-7 6-3 6-2 | 12-Feb-15 |
| Jose Statham | Radu Albot | Launceston Challenger | Second | 6-3 3-6 6-2 | 12-Feb-15 |
| Ze Zhang | Matthew Barton | Launceston Challenger | Second | 6-3 6-7(5) 7-6(5) | 12-Feb-15 |
| Bjorn Fratangelo | Yuichi Sugita | Launceston Challenger | Second | w/o | 12-Feb-15 |
| Jordan Thompson | Benjamin Mitchell | Launceston Challenger | 1/4 | 6-2 6-3 | 13-Feb-15 |
| Hyeon Chung | Harry Bourchier | Launceston Challenger | 1/4 | 6-0 3-6 6-1 | 13-Feb-15 |
| Bjorn Fratangelo | Bradley Klahn | Launceston Challenger | 1/4 | 7-6(2) 6-3 | 13-Feb-15 |
| Ze Zhang | Jose Statham | Launceston Challenger | 1/4 | 6-4 6-3 | 13-Feb-15 |
| Hyeon Chung | Jordan Thompson | Launceston Challenger | 1/2 | 5-7 6-3 7-5 | 14-Feb-15 |
| Bjorn Fratangelo | Ze Zhang | Launceston Challenger | 1/2 | 6-3 ret. | 14-Feb-15 |
| Bjorn Fratangelo | Hyeon Chung | Launceston Challenger | Final | 4-6 6-2 7-5 | 15-Feb-15 |
+-----------------------+------------------------+-----------------------+------------+-------------------+-----------+
值得我指出的是,Matches 表结构不是由我决定的 - 这是我购买了许可证且无法更改的第三方应用程序。作为上下文:ID1 字段是赢家,ID2 是输家。因此,要计算ID1 的匹配数,您必须计算ID1 和ID2 字段中的先前记录,因为在过去它们将同时赢得和输掉比赛。反之亦然ID2 当然。
我正在寻找的输出是提取一些现有字段并添加两个“计数”字段ID1_CNT 和ID2_CNT,如下所示:
+-----------+------------+-----------------------+-----------------------+------------------------+---------+---------+
| DATE_G | ID_R_G | ID_T_G | ID1_G | ID2_G | ID1_CNT | ID2_CNT |
+-----------+------------+-----------------------+-----------------------+------------------------+---------+---------+
| 07-Feb-15 | q-Second | Launceston Challenger | Patrick Davidson | Darren K. Polkinghorne | 8 | 14 |
| 07-Feb-15 | q-Second | Launceston Challenger | Tennys Sandgren | David Barclay | 109 | 6 |
| 07-Feb-15 | q-Second | Launceston Challenger | Gavin Van Peperzeel | Alexander Klintcharov | 18 | 7 |
| 07-Feb-15 | q-Second | Launceston Challenger | Yuichi Sugita | Daniel Groom | 351 | 1 |
| 07-Feb-15 | q-Second | Launceston Challenger | Omar Jasika | Daniel Nolan | 37 | 7 |
| 07-Feb-15 | q-Second | Launceston Challenger | Finn Tearney | Christian Trubrig | 9 | 1 |
| 07-Feb-15 | q-Second | Launceston Challenger | Alexander Sarkissian | Issei Okamura | 7 | 9 |
| 07-Feb-15 | q-Second | Launceston Challenger | Jacob Grills | Stefanos Tsitsipas | 25 | 8 |
| 08-Feb-15 | Qualifying | Launceston Challenger | Finn Tearney | Alexander Sarkissian | 10 | 8 |
| 08-Feb-15 | Qualifying | Launceston Challenger | Yuichi Sugita | Tennys Sandgren | 352 | 110 |
| 08-Feb-15 | Qualifying | Launceston Challenger | Gavin Van Peperzeel | Patrick Davidson | 19 | 9 |
| 08-Feb-15 | Qualifying | Launceston Challenger | Omar Jasika | Jacob Grills | 38 | 26 |
| 09-Feb-15 | First | Launceston Challenger | Bjorn Fratangelo | Blake Mott | 74 | 32 |
| 09-Feb-15 | First | Launceston Challenger | Ze Zhang | Alex Bolt | 174 | 68 |
| 09-Feb-15 | First | Launceston Challenger | Benjamin Mitchell | Maverick Banes | 129 | 30 |
| 09-Feb-15 | First | Launceston Challenger | Jordan Thompson | Yuuya Kibi | 65 | 27 |
| 09-Feb-15 | First | Launceston Challenger | Harry Bourchier | Hiroki Moriya | 29 | 225 |
| 09-Feb-15 | First | Launceston Challenger | Mitchell Krueger | Omar Jasika | 87 | 39 |
| 09-Feb-15 | First | Launceston Challenger | Brydan Klein | Sanam Singh | 194 | 102 |
| 09-Feb-15 | First | Launceston Challenger | Christopher O'Connell | Somdev Devvarman | 20 | 365 |
| 10-Feb-15 | First | Launceston Challenger | Jose Statham | Finn Tearney | 138 | 11 |
| 10-Feb-15 | First | Launceston Challenger | Yuichi Sugita | Marc Polmans | 353 | 24 |
| 10-Feb-15 | First | Launceston Challenger | Bradley Klahn | Matthew Ebden | 191 | 334 |
| 10-Feb-15 | First | Launceston Challenger | Dayne Kelly | Gavin Van Peperzeel | 42 | 20 |
| 10-Feb-15 | First | Launceston Challenger | Matthew Barton | Kyle Edmund | 67 | 107 |
| 10-Feb-15 | First | Launceston Challenger | Radu Albot | Di Wu | 209 | 147 |
| 10-Feb-15 | First | Launceston Challenger | Luke Saville | Andrew Whittington | 104 | 47 |
| 10-Feb-15 | First | Launceston Challenger | Hyeon Chung | Matt Reid | 83 | 183 |
| 11-Feb-15 | Second | Launceston Challenger | Jordan Thompson | Luke Saville | 66 | 105 |
| 11-Feb-15 | Second | Launceston Challenger | Harry Bourchier | Brydan Klein | 30 | 195 |
| 11-Feb-15 | Second | Launceston Challenger | Hyeon Chung | Mitchell Krueger | 84 | 88 |
| 11-Feb-15 | Second | Launceston Challenger | Benjamin Mitchell | Christopher O'Connell | 130 | 21 |
| 12-Feb-15 | Second | Launceston Challenger | Jose Statham | Radu Albot | 139 | 210 |
| 12-Feb-15 | Second | Launceston Challenger | Bjorn Fratangelo | Yuichi Sugita | 75 | 354 |
| 12-Feb-15 | Second | Launceston Challenger | Ze Zhang | Matthew Barton | 175 | 68 |
| 12-Feb-15 | Second | Launceston Challenger | Bradley Klahn | Dayne Kelly | 192 | 43 |
| 13-Feb-15 | 1/4 | Launceston Challenger | Ze Zhang | Jose Statham | 176 | 140 |
| 13-Feb-15 | 1/4 | Launceston Challenger | Bjorn Fratangelo | Bradley Klahn | 76 | 193 |
| 13-Feb-15 | 1/4 | Launceston Challenger | Jordan Thompson | Benjamin Mitchell | 67 | 131 |
| 14-Feb-15 | 1/2 | Launceston Challenger | Hyeon Chung | Jordan Thompson | 86 | 68 |
| 14-Feb-15 | 1/2 | Launceston Challenger | Bjorn Fratangelo | Ze Zhang | 77 | 177 |
| 15-Feb-15 | Final | Launceston Challenger | Bjorn Fratangelo | Hyeon Chung | 78 | 87 |
+-----------+------------+-----------------------+-----------------------+------------------------+---------+---------+
计数大于样本数据,因为它们计算了整个表格,但您可以看到计数如何随着玩家进行比赛而增加。
以上来自SQL如下:
SELECT games_atp.DATE_G, games_atp.ID_R_G, games_atp.ID_T_G, games_atp.ID1_G, games_atp.ID2_G, (SELECT COUNT(Dupe.ID1_G)
FROM games_atp as Dupe
WHERE Dupe.ID1_G = games_atp.ID1_G
AND Dupe.DATE_G < games_atp.DATE_G)+(SELECT COUNT(Dupe.ID2_G)
FROM games_atp as Dupe
WHERE Dupe.ID2_G = games_atp.ID1_G
AND Dupe.DATE_G < games_atp.DATE_G) AS ID1_CNT, (SELECT COUNT(Dupe.ID2_G)
FROM games_atp as Dupe
WHERE Dupe.ID2_G = games_atp.ID2_G
AND Dupe.DATE_G < games_atp.DATE_G)+(SELECT COUNT(Dupe.ID1_G)
FROM games_atp as Dupe
WHERE Dupe.ID1_G = games_atp.ID2_G
AND Dupe.DATE_G < games_atp.DATE_G) AS ID2_CNT
FROM games_atp
ORDER BY games_atp.DATE_G;
这非常慢,即使在几个小时后,Access 也没有显示任何结果的迹象。 games_atp 中有大约 280k 条记录。为了确保没有任何问题,我构建了一批记录(上面的示例数据集)来运行它,它可以工作,但需要几秒钟才能获得少量记录。所以看起来运行这种计数需要一段时间(或者结构错误?)。
在 Excel 中,我使用数组来执行大计算,因为这些显然存储在内存中,因此运行速度更快(我是这方面的新手)。我开始阅读有关 Access 中数组的更多信息,并发现了也可以存储在内存中的 Recordsets。到目前为止,我已经切换到 VBA,创建了一个 Recordset,并且我正在尝试使用 DCount 函数来计算符合条件的记录。问题是当我将记录集设置为域时,Access 似乎不喜欢它。
那么几个问题:
- 是否可以将 DCount 与以 Recordset 作为域的条件一起使用?
- 我是个白痴,我还没有找到更简单的解决方案吗?
提前致谢。
【问题讨论】:
-
1. 的答案是明确的否。不过,您可以复制和过滤记录集,然后对结果记录求和。但是,如果您提供示例数据和预期结果,我们或许可以编写更简单的查询。
-
谢谢@Erik A。你的意思是上传文件吗?我该怎么做?
-
不,不要上传文件。只需提供示例数据作为表格。见Share a table on Stack Overflow for easy import into MS Access
-
编辑了原始问题。希望这是足够的信息?
-
为什么 Players 中的名称和 Tours 中的名称与 Matches 中的名称不匹配?如果能提供相关记录就好了。
标签: ms-access