Aggregatsfunktion und zusätzliche Spalten darstellen...

ansim

Benutzer
Beiträge
5
Hallo!
Mein Access-Problem ist Folgendes:
Aus einer Tabelle mit vielen Mehrfacheinträgen, die sich nur durch ein anderes Datum unterscheiden [STANDdat], suche ich mit einer Abfrage die mit dem jüngsten Datum heraus. Hier die Abfrage:
Code:
SELECT [Abfrage].NAME, [Abfrage].T, [Abfrage].NUMMER, Max([Abfrage].STANDdat) AS MaxvonSTANDdat
FROM [Abfrage]
WHERE ([Abfrage].MASZSTAB)=100000
GROUP BY [Abfrage].NAME, [Abfrage].T, [Abfrage].NUMMER
ORDER BY [Abfrage].NAME, [Abfrage].T;
Das funktioniert auch prima!
Jetzt möchte ich aber zusätzlich noch das Feld [Abfrage].Auftragsnummer ausgeben.
Doch sobald ich das bei SELECT angebe, wird auch danach gruppiert und ich erhalte in der Ausgabe ALLE Datensätze - weil ja keine doppelten Auftragsnummer. vorhanden sind.
Wie stellt man das denn an?
Schon mal Danke für eure Mühe!!!
Andreas
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.702
Auch für das Feld Auftragsnummer musst du dir ein Kriterium überlegen das definiert, welche Auftragsnummer ausgegeben werden soll. Am einfachsten ist hier auch min() max() oder avg() zu benutzen.
Code:
SELECT    [Abfrage].NAME,
        [Abfrage].T,
        [Abfrage].NUMMER,
        Max([Abfrage].STANDdat) AS MaxvonSTANDdat,
        Min([Abfrage].Auftragsnummer) AS Auftragsnummer
FROM [Abfrage]
WHERE ([Abfrage].MASZSTAB)=100000
GROUP BY [Abfrage].NAME, [Abfrage].T, [Abfrage].NUMMER
ORDER BY [Abfrage].NAME, [Abfrage].T;
 

ansim

Benutzer
Beiträge
5
Nein!
Es ist wohl doch nicht so einfach...
Ich habe einen Fehler gemacht: Es gibt doch auch gleiche Auftragsnummern
mit:
Code:
Min([Abfrage].Auftragsnummer) AS Auftragsnummer
wird die kleinste Auftragsnummer ausgegeben - das ist aber nicht immer diejenige, die dem jüngsten Bearbeitungsdatum entspricht.
Also: Ich suche die Einträge heraus, die das jüngste Bearbeitungsdatum haben und genau zu diesen brauche ich diese Auftragsnummer.
Danke im Vorraus!
Andreas
 

ukulele

Datenbank-Guru
Beiträge
4.702
Geht auf, ich denke mal auf verschiedene Art und Weise. Probier mal das hier:
Code:
SELECT    a1.NAME,
        a1.T,
        a1.NUMMER,
        Max(a1.STANDdat) AS MaxvonSTANDdat,
        (    SELECT    Min(a2.Auftragsnummer)
            FROM    [Abfrage] a2
            WHERE    a1.NAME = a2.NAME
            AND        a1.T = a2.T
            AND        a1.NUMMER = a2.NUMMER
            AND        a1.STANDdat = a2.STANDdat ) AS Auftragsnummer
FROM    [Abfrage] a1
WHERE    a1.MASZSTAB = 100000
GROUP BY a1.NAME, a1.T, a1.NUMMER,(    SELECT    Min(a2.Auftragsnummer)
                                    FROM    [Abfrage] a2
                                    WHERE    a1.NAME = a2.NAME
                                    AND        a1.T = a2.T
                                    AND        a1.NUMMER = a2.NUMMER
                                    AND        a1.STANDdat = a2.STANDdat )
ORDER BY a1.NAME, a1.T
 

ansim

Benutzer
Beiträge
5
Vielen Dank zunächst mal!
Da tun sich einige Fragen auf:
a1 ist wohl meine Abfrage [Abfrage]
Was ist denn a2 für eine Abfrage?
Eine Kopie von [Abfrage]?

Wenn ich das so kopiere dann kommt eine Fehlermeldung:
Syntaxfehler in Abfrageausdruck [Abfrage].Nummer (Select MIN([A2].Auftragsnummer....
das muss die unterabfrage bei Group by sein.
Viele Grüße,
Andreas
 

ukulele

Datenbank-Guru
Beiträge
4.702
a1 und a2 sind nur Aliase für die selbe Abfrage. Damit ich in der Unterabfrage auf die andere Zugreifen kann dürfen die Tabellennamen nicht gleich sein. Ich habe ein Komma vergessen, habe es mal korrigiert. Ich hoffe das war der Grund.

Leider kann man in GROUP BY nicht den Spalten Alias Auftragsnummer verwenden (zumindest bei MSSQL), daher musste ich dort nochmal die komplette Unterabfrage einfügen. In ORDER BY ginge das.
 
Werbung:
Oben