2017-10-06 62 views
0

我有以下查詢(我們稱之爲查詢1)(承蒙Erik von Asmuth創建here):訪問:查詢崩潰

SELECT PARTNERID 
    ,NAME 
    ,FIRST_NAME 
    ,UID 
    ,DATA_R 
FROM MY_TABLE 
WHERE MY_TABLE.[DATA_R] = (
     SELECT MAX(t.[DATA_R]) 
     FROM MY_TABLE AS t 
     WHERE t.PARTNERID = MY_TABLE.PARTNERID 
     ) 
ORDER BY PARTNERID; 

MY_TABLE20000記錄,並查詢(即使該名稱可能暗示相反)具有以下形式:

SELECT [MYTABLE_O].PARTNERID, [MYTABLE_O].NAME, [MYTABLE_O].FIRST_NAME, [MYTABLE_O].[Codice fiscale] AS CF, [MYTABLE_O].Date AS DATA_R 
FROM [MYTABLE_O] LEFT JOIN [TO_EXCLUDE] ON [MYTABLE_O].[PARTNERID] = [TO_EXCLUDE].[PARTNERID] 
WHERE ((([TO_EXCLUDE].PARTNERID) Is Null)); 

(我要排除一些已經被認爲是元素在表TO_EXCLUDE)。

當我運行查詢(Query1)MS Access凍結。我怎樣才能避免它/使它更加高效和穩定?

我試圖指數MYTABLE_OPARTNERIDDATA_R

+1

在[DATA_R]上應用索引。 – Gustav

+0

你能進一步解釋一下嗎?也許有一個例子? – cacc

+0

我真的不喜歡在新問題中收到我對答案的反饋。只是評論答案[這裏](https://stackoverflow.com/questions/46581638/select-record-in-access-with-most-re- date/46581690#46581690) –

回答

0

您可能需要編寫子查詢的結果:

SELECT PARTNERID, MAX([DATA_R]) AS MAXDATAR 
FROM YourQuery 
GROUP BY PARTNERID 

到一個臨時表,然後在查詢中替換

FROM MY_TABLE AS t 

FROM TempTable AS t 
+0

謝謝。但是,我應該如何在初始查詢中編輯'DATA_R'部分?如果我喜歡這個'WHERE MY_TABLE。[DATA_R] =( SELECT MAX(T。[MAXDATAR]) FROM TempTabe AS噸 WHERE t.PARTNERID = MY_TABLE.PARTNERID ) '我只具有如日期導致最大因爲我希望記錄與特定'PARTNERID'的最大日期相關的記錄(所以相對MAX日期而不是絕對值),所以這個樣本中的日期不是我所需要的。或者,也許我還沒有理解整個畫面。 STEP1)是MyOriginal Table,STEP2)是TempTable和STEP3)是初始查詢嗎? – cacc

+0

您可以創建初始查詢的副本並對其進行修改以創建臨時表。 – Gustav