Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: C4RL0 am Februar 25, 2013, 13:44:45

Titel: Brauche SQL Hilfe
Beitrag von: C4RL0 am Februar 25, 2013, 13:44:45
Hi,

ich brauche Hilfe bei einem Teil-Statement:

    strSQL = "SELECT  trkAuftragsnummer, " & _
                        "MAX(trkZeit) AS MaxZeit " & _
                        "FROM     tblTrack " & _
                        "WHERE (trkZiel = 'MNZ' ) " & _
                        "GROUP BY trkAuftragsnummer;"



Die Auftragsnummer kommt mehrmals vor, jeweils mit unterschiedlichen Zeitstempeln und unterschiedlichen Zielen.
Ich brauche die Auftragsnummern , wo mit dem letzten (!) Zeitstempel das Ziel MNZ angegeben wurde.
Mit obigem Code erhalte ich den letzten Zeitstempel der Artikel, die irgendwann als Ziel MNZ hatten. Was muss ich ändern?
Titel: Re: Brauche SQL Hilfe
Beitrag von: database am Februar 25, 2013, 13:49:04
Hallo,

versuche mal so:


    strSQL = "SELECT  trkAuftragsnummer, " & _
                        "LAST(trkZeit) AS MaxZeit " & _
                        "FROM     tblTrack " & _
                        "WHERE (trkZiel = 'MNZ' ) " & _
                        "GROUP BY trkAuftragsnummer;"




HTH
Titel: Re: Brauche SQL Hilfe
Beitrag von: C4RL0 am Februar 25, 2013, 13:58:15
Hmmm... das Ergebnis ist leider das gleiche wie oben...

(Mit Zeitstempel meinte ich übrigens das Feld trkZeit)
Titel: Re: Brauche SQL Hilfe
Beitrag von: database am Februar 25, 2013, 14:05:29
Hallo,

und wenn du trkZeit aufsteigend sortierst?

"GROUP BY trkAuftragsnummer " & _
"ORDER BY Last(trkZeit);"
Titel: Re: Brauche SQL Hilfe
Beitrag von: C4RL0 am Februar 25, 2013, 14:20:27
Auch nicht, wieder das selbe Resultat (wenn auch anders sortiert)

Ich hab mal ein Beispiel angehängt.
Aus der angehängten Minitabelle bräuchte ich z.B. den Auftrag 456 zurück. Mit meinem Code-Beispiel bekomme ich aber 123 UND 456 zurück.

[Anhang gelöscht durch Administrator]
Titel: Re: Brauche SQL Hilfe
Beitrag von: 69bruno am Februar 25, 2013, 14:52:45
Wenn Du nur ein  Ergebnis haben willst, warum wird dann gruppiert ?  ???
Titel: Re: Brauche SQL Hilfe
Beitrag von: C4RL0 am Februar 25, 2013, 15:03:21
Zitat von: 69bruno am Februar 25, 2013, 14:52:45
Wenn Du nur ein  Ergebnis haben willst, warum wird dann gruppiert ?  ???

Die Original Tabelle ist schon ein wenig länger und die Abfrage komplexer. Ich habe hier nur das Kernproblem, das ich damit habe, extrahiert.
Titel: Re: Brauche SQL Hilfe
Beitrag von: database am Februar 25, 2013, 15:08:09
Hallo,

anhand deines Beispiels habe ich eine Tabelle erstellt und folgend abgefragt:


SELECT TOP 1 Last(Zeit) AS LetzterWertvonZeit, Ziel, Auftrag
FROM Tabelle1
GROUP BY Ziel, Auftrag
HAVING Ziel="MNZ"
ORDER BY Last(Zeit) DESC;



dies ergibt folgendes Ergebnis:

LetzterWertvonZeit   Ziel   Auftrag
22:10:00                    MNZ   456
Titel: Re: Brauche SQL Hilfe
Beitrag von: C4RL0 am Februar 25, 2013, 15:29:22
Das passt so noch nicht, ich fürchte ich kann mich nicht passend ausdrücken.
Ich hab noch ein erweitertes Beispiel angehängt.

Aus diesem Beispiel bräuchte ich folgende Datensätze zurück:

Auftrag:       Zeit:               Ziel:
456             22:20:00        MNZ
101             22:50:00        MNZ

Da pro Auftrag die jeweils letzte Zeit zu MNZ gehört.

[Anhang gelöscht durch Administrator]
Titel: Re: Brauche SQL Hilfe
Beitrag von: database am Februar 25, 2013, 15:45:37
Hallo,

ahhhh....   jetzt verstehe ich dich - glaube ich - richtig.  ;D

dann geht das nur mit 2 Abfragen ...

siehe Beispiel



[Anhang gelöscht durch Administrator]
Titel: Re: Brauche SQL Hilfe
Beitrag von: C4RL0 am Februar 25, 2013, 16:05:37
Ja, da scheinen wir uns dem Ziel zu nähern, das Ergebnis schaut schon mal gut aus...
nur wie frikkel ich das jetzt in ein einziges Statement?

Ich hangel mich gerade von Syntaxfehler zu Syntaxfehler...
Titel: Re: Brauche SQL Hilfe
Beitrag von: ebs17 am Februar 25, 2013, 17:28:06
Zitatnur wie frikkel ich das jetzt in ein einziges Statement?

Copy & Paste ist da sehr geeignet. Das ist gegeben (Abfrage2):
SELECT Tabelle1.Auftrag, Tabelle1.Zeit, Tabelle1.Ziel
FROM Tabelle1 INNER JOIN
Abfrage1
ON (Tabelle1.Zeit = Abfrage1.MaxvonZeit) AND (Tabelle1.Auftrag = Abfrage1.Auftrag)
WHERE (((Tabelle1.Ziel)="MNZ"))


Wenn man jetzt den Abfragenamen Abfrage1 als Alias betrachtet und die zugehörige SQL-Anweisung davor einfügt, sieht es etwa so aus:
SELECT Tabelle1.Auftrag, Tabelle1.Zeit, Tabelle1.Ziel
FROM Tabelle1 INNER JOIN
(SELECT Tabelle1.Auftrag, Max(Tabelle1.Zeit) AS MaxvonZeit
FROM Tabelle1
GROUP BY Tabelle1.Auftrag) AS Abfrage1
ON (Tabelle1.Zeit = Abfrage1.MaxvonZeit) AND (Tabelle1.Auftrag = Abfrage1.Auftrag)
WHERE (((Tabelle1.Ziel)="MNZ"))


Etwas aufgeräumter (erst filtern, dann joinen + Klammern reduziert + Tabellenaliase wo nötig) könnte es dann so aussehen:
SELECT
    A.Auftrag,
    A.Zeit,
    A.Ziel
FROM
    (
        SELECT
            Auftrag,
            Zeit,
            Ziel
        FROM
            Tabelle1
        WHERE
            Ziel = 'MNZ'
    ) AS A
        INNER JOIN
            (
                SELECT
                    Auftrag,
                    Max(Zeit) AS MaxZeit
                FROM
                    Tabelle1
                GROUP BY
                    Auftrag
            ) AS B
            ON
                A.Auftrag = B.Auftrag
                    AND
                A.Zeit = B.MaxZeit


MfGA
ebs
Titel: Re: Brauche SQL Hilfe
Beitrag von: C4RL0 am Februar 26, 2013, 08:15:20

Ich produzier nach wie vor nur Syntax-Fehler...

    strSQL = "SELECT A.trkAuftragsnummer, A.trkZeit, A.trkZiel " & _
             "FROM ( " & _
                "SELECT trkAuftragsnummer, trkZeit, trkZiel " & _
                "FROM tblTrack " & _
              "WHERE trkZiel = 'MNZ') AS A " & _
              "INNER JOIN ( " & _
                  "SELECT trkAuftragsnummer, Max(trkZeit) AS MaxZeit " & _
                  "FROM tblTrack " & _
                  "GROUP BY trkAuftragsnummer) AS B " & _
                  "ON A.trkAuftragsnummer = B.trkAuftragsnummer AND A.trkZeit = B.MaxZeit) " & _
                "WHERE A.trkZiel = 'MNZ';"
Titel: Re: Brauche SQL Hilfe
Beitrag von: C4RL0 am Februar 26, 2013, 08:31:43
Ich habs, da war eine Klammer zu viel... (die letzte) Ich bedanke mich bei allen Helfern in diesem Thread recht herzlich!
Titel: Re: Brauche SQL Hilfe
Beitrag von: 69bruno am Februar 26, 2013, 13:15:54
Jetzt habe ich auch verstanden, warum gruppiert wird......
Titel: SQL-Anweisung in VBA-Code überführen
Beitrag von: ebs17 am Februar 26, 2013, 18:57:39
Zum Umwandeln einer SQL-Anweisung in etwas in VBA verwertbares könnte man eine Lösung hernehmen wie im Anhang dargestellt und so über etwas Automatisierung Routinearbeit reduzieren und die Fehlerquote, die gerade beim Überführen einer SQL-Anweisung in VBA-Code hoch ist, im Rahmen halten.

Die Inhalte der Datei sind aus einem größerem Projekt herausgelöst und in diesem Zusammenspiel nicht ausgetestet, mit Sicherheit aber im normalen Gebrauch verwendbar.

MfGA
ebs

[Anhang gelöscht durch Administrator]