2016-06-08 11 views
0

Kann mir diese Abfrage in der Datenbank (Access 2010) helfen bitte zu optimieren, diese Abfrage sehr langsam arbeiten (wenn es in einem großen Tisch verwenden):Access 2010 - Optimierung eine Abfrage

SELECT П1.Code, П1.Field, П1.Number, П1.Data, [П1].[Number]-(select П3.Number from [Table] as П3 
    where П3.Field = П1.Field                
    and П3.Data = (select Max(Data)                   
    from [Table] as П2                   
    where П2.Field = П1.Field and П1.Data > П2.Data)) AS Difference 
FROM [Table] AS П1 
ORDER BY П1.Field, П1.Data; 

Ich bin befestigen Bild: http://s33.postimg.org/otm859xtb/Table_query.png

Links in der Datenbank: http://s000.tinyupload.com/?file_id=06711692152703646964

Antwort

0

Wie wäre es ...

SELECT t.Code,t.Field,t.Number,t.Data,t.Number-tm.LastNumber AS Difference 
FROM [Table] AS t 
INNER JOIN (
    SELECT t.Field,t.Number AS LastNumber 
    FROM [Table] AS t 
    INNER JOIN (
    SELECT Field,MAX(Data) AS MaxData 
    FROM [Table] 
    GROUP BY Field 
    ) AS tm ON tm.Field=t.Field AND tm.MaxData=t.Data 
) AS tm ON tm.Field=t.Field 

Die Unterauswahl kann Ihnen Probleme bei der Formatierung in Access geben, sollte aber funktionieren.

0

PLease versuchen diese, genauso wie Kevin))

SELECT Table.Code, Table.Field, Table.Number, Table.Data, [Table].[Number]-[t1].[number] AS Difference 
FROM 
(SELECT Table.Code, Table.Field, Table.Number, Table.Data 
FROM [Table] INNER JOIN 
(SELECT Table.Field, Max(Table.Data) AS MaxOfData 
FROM [Table] GROUP BY Table.Field) AS t2 ON (t2.MaxOfData = Table.Data) AND 
(Table.Field = t2.Field)) AS t1 INNER JOIN [Table] ON t1.Field = Table.Field;