Hallo,
Ich habe eine Abfrage die zu einer MotorID mehrere Einbaudaten enthält. Um darin zu suchen verwende ich zur Zeit folgende SQL-Abfrage.
strSQL = "SELECT * FROM abf_Einbau WHERE " & sWhere
Jetzt möchte ich diese Abfrage so erweitern dass immer nur im neusten Eintrag einer MotorID gesucht wird.
Wie kann ich das machen?
Tom
Hallo,
strSQL = "SELECT Top 1 * FROM abf_Einbau WHERE " & sWhere & " order by Vorgangsdatum desc"
Zitat..immer nur im neusten Eintrag..
wobei in
Vorgangsdatum auch die Uhrzeit enthalten sein muss.
Damit erhalte ich immer nur den neusten Wert der Abfrage, ich möchte aber ja von jedem Motor (MotorGrunddatenID) den neusten Wert erhalten.
Zitat von: DF6GL am Januar 04, 2014, 09:06:52
wobei in Vorgangsdatum auch die Uhrzeit enthalten sein muss.
Es gibt hier aber nur das Datum, da ein Motor an einem Tag nicht mehrmals eingebaut wird.
Tom
Hallo,
Du hast nur von EINER MotorID geschrieben. Zudem ist der Where-Condition-String und der Tabellenaufbau nicht bekannt.
Hier ein (natürlich anzupassendes!) Beispiel aus ebs77's "SQL ist leicht"-Grundlagen.
ZitatBeispiel: In einer Kontakttabelle soll für jeden Kunden der letzte Kontakttermin ermittelt werden. Dabei sollen aber alle Felder des Kontaktes angezeigt werden:
Code:
SELECT
K.KundeID,
K.Kontaktdatum,
K.Anlass,
K.BetreuerID
FROM
tblKontakte AS K
INNER JOIN
(
SELECT
KundeID,
Max(Kontaktdatum) AS LetzterKontakt
FROM
tblKontakte
GROUP BY
KundeID
) AS A
ON K.KundeID = A.KundeID
AND
K.Kontaktdatum = A.LetzterKontakt
Danke, damit klappt das schonmal.
Jetzt habe ich aber noch ein Problem. Es wird mir jetzt zwar für jeden Motor der letzte Einbau geliefert, aber natürlich sollte das auch nur geliefert werden wenn der letzte Vorgang des Motors ein Einbau war.
Meine Abfrage sieht im Moment so aus:
SELECT k.Vorgang, k.Vorgangsdatum, k.VorgangsInfo, k.MotorGrunddatenID, k.Hersteller, k.SZNr, k.MotorBemerkung, k.Motortyp, k.Motornr, k.Verwendung
FROM abf_Einbau AS k INNER JOIN (SELECT abf_Einbau.MotorGrunddatenID, Max(abf_Einbau.Vorgangsdatum) AS LetzterEinbau FROM abf_Einbau GROUP BY abf_Einbau.MotorGrunddatenID) AS a ON (k.Vorgangsdatum = a.LetzterEinbau) AND (k.MotorGrunddatenID = a.MotorGrunddatenID);
Wie muss ich die jetzt ändern?
Tom
Habe jetzt an die o.g. Abfrage so geändert:
SELECT k.Vorgang, k.Vorgangsdatum, k.VorgangsInfo, k.MotorGrunddatenID, k.Hersteller, k.SZNr, k.MotorBemerkung, k.Motortyp, k.Motornr,k.Verwendung
FROM abf_Einbau AS k INNER JOIN (SELECT abf_Einbau.MotorGrunddatenID, Max(abf_Einbau.Vorgangsdatum) AS LetzterEinbau FROM abf_Einbau GROUP BY abf_Einbau.MotorGrunddatenID) AS a ON (k.Vorgang = a.Vorgang) AND (k.MotorGrunddatenID = a.MotorGrunddatenID) AND (k.Vorgangsdatum = a.LetzterEinbau);
Beim Aufruf kommt jetzt natürlich eine Paramterabfrage für a.Vorgang. Wenn ich dort Einbau eingebe werden mir die richtigen Ergebnisse geliefert.
Wie kann ich aber jetzt dem Parameter den Wert Einbau fest mitgeben?
k.Vorgang = "Einbau" funktioniert nicht.
Tom
Habe es hinbekommen:
SELECT k.Vorgang, k.Vorgangsdatum, k.VorgangsInfo, k.MotorGrunddatenID, k.Hersteller, k.SZNr, k.MotorBemerkung, k.Motortyp, k.Motornr, k.Verwendung
FROM abf_Einbau AS k INNER JOIN (SELECT abf_Einbau.MotorGrunddatenID, Max(abf_Einbau.Vorgangsdatum) AS LetzterEinbau FROM abf_Einbau GROUP BY abf_Einbau.MotorGrunddatenID) AS a ON (k.Vorgangsdatum = a.LetzterEinbau) AND (k.MotorGrunddatenID = a.MotorGrunddatenID)
WHERE ((k.Vorgang)="Einbau");
Tom