Neuigkeiten:

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

Mobiles Hauptmenü

Brauche SQL Hilfe

Begonnen von C4RL0, Februar 25, 2013, 13:44:45

⏪ vorheriges - nächstes ⏩

C4RL0

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?
_____________________________
Gruß
Carlo

database

Hallo,

versuche mal so:


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




HTH

C4RL0

Hmmm... das Ergebnis ist leider das gleiche wie oben...

(Mit Zeitstempel meinte ich übrigens das Feld trkZeit)
_____________________________
Gruß
Carlo

database

Hallo,

und wenn du trkZeit aufsteigend sortierst?

"GROUP BY trkAuftragsnummer " & _
"ORDER BY Last(trkZeit);"

C4RL0

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]
_____________________________
Gruß
Carlo

69bruno

Wenn Du nur ein  Ergebnis haben willst, warum wird dann gruppiert ?  ???
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

C4RL0

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.
_____________________________
Gruß
Carlo

database

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

C4RL0

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]
_____________________________
Gruß
Carlo

database

Hallo,

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

dann geht das nur mit 2 Abfragen ...

siehe Beispiel



[Anhang gelöscht durch Administrator]

C4RL0

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...
_____________________________
Gruß
Carlo

ebs17

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
Mit freundlichem Glück Auf!

Eberhard

C4RL0


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';"
_____________________________
Gruß
Carlo

C4RL0

Ich habs, da war eine Klammer zu viel... (die letzte) Ich bedanke mich bei allen Helfern in diesem Thread recht herzlich!
_____________________________
Gruß
Carlo

69bruno

Jetzt habe ich auch verstanden, warum gruppiert wird......
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If