Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: -Tom- am Januar 04, 2014, 07:55:37

Titel: [SQL-Abfrage] Mehrmals gleiche ID, suchen nur im neusten Eintrag
Beitrag von: -Tom- am Januar 04, 2014, 07:55:37
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
Titel: Re: [SQL-Abfrage] Mehrmals gleiche ID, suchen nur im neusten Eintrag
Beitrag von: DF6GL am Januar 04, 2014, 09:06:52
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.
Titel: Re: [SQL-Abfrage] Mehrmals gleiche ID, suchen nur im neusten Eintrag
Beitrag von: -Tom- am Januar 04, 2014, 09:49:02
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
Titel: Re: [SQL-Abfrage] Mehrmals gleiche ID, suchen nur im neusten Eintrag
Beitrag von: DF6GL am Januar 04, 2014, 10:50:59
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
Titel: Re: [SQL-Abfrage] Mehrmals gleiche ID, suchen nur im neusten Eintrag
Beitrag von: -Tom- am Januar 04, 2014, 14:35:23
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
Titel: Re: [SQL-Abfrage] Mehrmals gleiche ID, suchen nur im neusten Eintrag
Beitrag von: -Tom- am Januar 05, 2014, 07:27:32
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
Titel: Re: [SQL-Abfrage] Mehrmals gleiche ID, suchen nur im neusten Eintrag
Beitrag von: -Tom- am Januar 05, 2014, 10:01:54
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