1

我有访问查询,它确实需要时间来执行。现在,我必须经过至少四个查询才能获得我想要的结果,即按组排名前 4 的百分比。以下是查询。

  1. Query1 - 添加计算字段,即 column3。
  2. Query2 - 为 column3 添加累积字段。
  3. Query3 - 添加我使用 column3 进行计算的计算字段。calcfield1、calcfield2、calcfield3 使用 UNION 查询将它们组合在一个列 (NewColumn) 中。对 NewColumn 求和并按 GroupID 对它们进行分组。
  4. Query4 - 按 GroupID 选择 NewColumn 中的前 4 个值。

示例输出(GroupID 的 NewColumn 的前 4 个值):

Group1 1.45
Group1 1.00
Group1 0.45
Group1 0.20
Group2 8.20
Group2 4.48
Group2 3.44
Group2 2.00

当我运行 Query4 时,执行需要一段时间(至少 10 分钟)。由于累积百分比计算,查询必须返回所有记录。

我在 Query3 中尝试了 HAVING 子句,以便在我选择前 4 名时最小化 Query4 中的行,但我无法让它工作。我还尝试在 Query2 中获得前 4 名,以便后续查询可以使用的行更少,但查询需要更多时间,我不得不中断查询的执行。

我想简化或至少优化查询。

表结构:

 Table1:
 ID - Autonumber
 GroupID
 Tip1
 Tip2
 Tip3
 Tip4

Sample data Table1:
GroupID    Tip1      Tip2        Tip3      Tip4
171        1          5           4          8
172        2          7           5          3
173        8          16          10          

Table2:
ID - Autonumber
GroupID
Result1
Result2
Result3

Sample data Table2:
GroupID    Result1  Result2     Result3
171        1          5           4    
172        12         7           5    
173        8          6           3   

Table1 和 Table2 使用 GroupID 连接

4

1 回答 1

1

我曾经遇到过类似的情况,我必须通过复杂的自联接对数据进行排名。在我首先将数据转储到临时表然后对其运行更新查询之前,这非常慢。仍然很慢,但没有那么糟糕。

也许您可以使用临时表而不是一系列连接查询?那么#1、#2 和#3 可以是作用于该临时表的更新查询。

于 2013-05-30T18:47:49.147 回答