优化或简化MS Access查询

时间:2013-05-30 18:10:59

标签: sql ms-access

我有Access查询,这确实需要时间来执行。现在,我必须通过至少四个查询来获得我想要的结果,这是按组分列的前4个百分比。以下是查询。

  1. Query1 - 添加计算字段,即column3。
  2. Query2 - 为column3添加累积字段。
  3. Query3 - 添加我使用column3进行计算的计算字段。 calcfield1,calcfield2,calcfield3使用UNION查询将它们组合在一列(NewColumn)中。对NewColumn求和并按GroupID分组。
  4. Query4 - 按GroupID选择NewColumn中的前4个值。
  5. 示例输出(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子句,这样当我选择Top 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   
    

    表1和表2使用GroupID

    连接

1 个答案:

答案 0 :(得分:1)

我曾经遇到类似的情况,我不得不通过复杂的自我加入对数据进行排名。在我第一次将数据转储到临时表然后对其运行更新查询之前,它非常缓慢。仍然很慢,但不是那么糟糕。

也许你可以使用临时表而不是一系列连接的查询?然后#1,#2和#3可以是作用于该登台表的更新查询。