2013-05-30 124 views
1

我有訪問查詢確實需要時間來執行。現在,我必須經過至少四次查詢才能得到我想要的結果,這個結果是小組排名前四的。這裏是查詢。優化或簡化MS Access查詢

  1. Query1 - 添加第3列的計算字段。
  2. 查詢2 - 爲列3添加累積字段。
  3. Query3 - 添加我在其中使用column3進行計算的計算字段。 calcfield1,calcfield2,calcfield3使用UNION查詢將它們組合到一列(NewColumn)中。總結NewColumn並按GroupID對它們進行分組。
  4. Query4 - 按GroupID在NewColumn中選擇前4個值。

樣本輸出(頂部通過的GroupID 4個值NewColumn的):

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子句,這樣Query4中的行將被最小化,當我選擇Top 4但我無法得到它的工作。我也嘗試過在Query2中獲得前四名,以便後續查詢有更少的行來處理,但查詢需要更多時間,我不得不中斷查詢的執行。

我想簡化或至少優化查詢。

表結構:

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 

Table 1和表2是使用羣ID

+0

你可以顯示你的表結構和一些樣本輸入數據嗎 – rene

+0

是的,Query3一定是瓶頸,因爲三個字段合併成一個。如果我可以在Query3中按組獲得前4名,則可以消除Query4。但我不知道該怎麼做,因爲我必須在Select Top 4子查詢中使用HAVING子句。 – matley

+0

更新:只有Query4非常慢。其他查詢在合理的時間內返回記錄。 – matley

回答

1

加入我也有類似的情況曾經在那裏我有經過複雜的自聯接排名數據。這是非常緩慢的,直到我第一次將數據轉儲到臨時表中,然後在其上運行更新查詢。仍然很慢,但並不差。

也許你可以使用臨時表而不是一系列連接的查詢?然後,#1,#2和#3可以作爲在該登臺表上作用的更新查詢。

+0

我實際使用#3的登臺表。沒有嘗試過#1和#2。會試試看。 – matley

+0

順便說一句,如何更新更改並在臨時表上插入新記錄?我的意思是,我如何捕捉實際表格上的變化,以便更改反映在臨時表上? – matley

+0

這並不難。你的問題基本上轉化爲「我如何在Access中進行更新查詢?」所以請嘗試使用谷歌搜索。例如,在創建登臺表(可能使用生成表查詢)時,爲「Column3」包含一個空白字段,然後使用更新查詢填充它。 – PowerUser