Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

[SQL-Abfrage] Mehrmals gleiche ID, suchen nur im neusten Eintrag

Begonnen von -Tom-, Januar 04, 2014, 07:55:37

⏪ vorheriges - nächstes ⏩

-Tom-

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
Computerprobleme??? -> http//www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen

DF6GL

#1
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.

-Tom-

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
Computerprobleme??? -> http//www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen

DF6GL

#3
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

-Tom-

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
Computerprobleme??? -> http//www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen

-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
Computerprobleme??? -> http//www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen

-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
Computerprobleme??? -> http//www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen