shadoan Geschrieben 13. Mai 2005 Teilen Geschrieben 13. Mai 2005 Guten Morgen die Herren, vielleicht könnte mir mal wieder jemand bei einem SQL-Problem helfen. Ich habe folgende SQL-Anweisung: SELECT dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.errorcode, dsl_errorcodes.description, max( dsl_data.emailnummer ) AS mailnummer, dsl_treatment.action , dsl_errorcodes.description FROM dsl_data INNER JOIN dsl_treatment ON ( dsl_data.auftragsnummer = dsl_treatment.auftragsnummer ) INNER JOIN dsl_errorcodes ON ( dsl_data.errorcode = dsl_errorcodes.code ) GROUP BY dsl_data-auftragsnummer ORDER BY dsl_treatment.date DESC Ziel soll es sein, die Auftragsnummer, Nachname, Vorname usw und auch eine Aktionsnummer, und zwar die des letzten Eintrages in der Tabelle dsl_treatment zu der übergebenen Auftragsnummer zu ermitteln. Was er nun aber tut, ist mir die erste Aktionsnummer für die jeweilige Auftragsnummer zu übermitteln, die er findet. Ich denke, mal dass da wohl irgendwie die Abfrage nicht stimmt, aber was ist da falsch bitte? Vielen Dank. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Keo Geschrieben 13. Mai 2005 Teilen Geschrieben 13. Mai 2005 morgen also ich hab das gerad mal nachgestellt, ohne das group by funktioniert es bei mir wie gewuenscht. was mich noch interessieren wuerde, waer warum du dir 2mal die dsl_errorcodes.description anzeigen laesst? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
shadoan Geschrieben 13. Mai 2005 Autor Teilen Geschrieben 13. Mai 2005 Upps das eine dsl_errorcodes war einmal zuviel. Allerdings wenn ich das Group By rausnehme, kommt eine Fehlermeldung, weil ich die Max Funktion in der eMailnummer drin habe. Und da brauch ich wiederum die höchste. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Keo Geschrieben 13. Mai 2005 Teilen Geschrieben 13. Mai 2005 SELECT dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.errorcode, dsl_errorcodes.description, Max(dsl_data.emailnummer) AS [mailnummer], dsl_treatment.action FROM (dsl_data INNER JOIN dsl_errorcodes ON dsl_data.errorcode = dsl_errorcodes.code) INNER JOIN dsl_treatment ON dsl_data.auftragsnummer = dsl_treatment.auftragsnummer GROUP BY dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.errorcode, dsl_errorcodes.description, dsl_treatment.action, dsl_treatment.date ORDER BY dsl_treatment.date DESC; ist zwar nicht schoen, aber geht Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
shadoan Geschrieben 13. Mai 2005 Autor Teilen Geschrieben 13. Mai 2005 Leider nicht ganz, das bringt alle Datensätze raus untereinander. Sorry. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Keo Geschrieben 13. Mai 2005 Teilen Geschrieben 13. Mai 2005 hmm, kannst du dann nochmal dein ziel etwas genauer erlaeutern?ich habs naemlich so verstanden :beagolisc Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
shadoan Geschrieben 13. Mai 2005 Autor Teilen Geschrieben 13. Mai 2005 Also, ich habe drei Tabellen miteinander verknüpft. In der DSL-Data stehen Datensätze, wie z.B. eine eMail-Nummer und ein Fehlercode. Ich möchte nun aus der DSL-Data den höchsten eMail-Nummer Eintrag haben und den Fehlercode. Das geht ja soweit, das mit den Fehlercodes klappt. Nun gibt es auch ein Aktionsfeld in der Tabelle dsl_treatment, die auch die Auftragsnummer enthält. Hieraus möchte ich den aktuellsten, also von der Zeit her den letzten Datensatz, damit ich die letzte Aktion mit diesem Auftrag anzeigen kann. Also auftragsnummer, höchtste eMailnummer aus dsl_data, fehlercode aus dsl_errorcodes und letzte Eintragung aus dsl_treatment unter dieser auftragsnummer. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Keo Geschrieben 13. Mai 2005 Teilen Geschrieben 13. Mai 2005 also werden die auftragsnummern in der data mehrmals verwendet und durch die emailnummer kriegst du die reihenfolge raus?das problem ist aber das in der treatment nur die auftragsnummer steht und man keine verknüpfung zur emailnummer hat, ist das gewollt ? so ich mach erstmal mittag, wir kriegen das aber noch hin Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
shadoan Geschrieben 13. Mai 2005 Autor Teilen Geschrieben 13. Mai 2005 So ist das korrekt wie du es sagst und so ist es auch gewollt oder muss so sein, weil so angeliefert wird *grr* leider. Auftragsnummer ist in der Tabelle dsl_data mehrmals mit mehreren eMailnummern also 1,2,3 bspw. und auftragsnummer ist auch in der tabelle dsl_treatment mehrmals mit den aktionen zum Auftrag also nummer und aktion 1 oder 2 oder 3 bspw. mit einem zusätzlichen Timestamp. Nehmen wir nun folgendes an. Wir haben die auftragsnummer 127112, an die wurden die emails 2 und 3 verschickt. und die hat die aktionen 1, 2, 3, und 4, wovon die Aktion 2 die jüngste ist, weil grade getätigt. Mein ergebnis soll nun sein: Auftragsnummer 127112 + eMail-Nr 3 + Aktionsnummer 2 Hoffe nun ist es verständlich. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Keo Geschrieben 13. Mai 2005 Teilen Geschrieben 13. Mai 2005 aber es gibt doch zwischen der treatment und der data nur ne verknüpfung über die auftragsnummer, woher soll er dann wissen welche email welcher aktion zugeordnet ist? wenn man die abfrage so macht, dann gibt er einfach alles raus, weil ja die mailnummer zu jeder aktion gehoeren kann Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
shadoan Geschrieben 13. Mai 2005 Autor Teilen Geschrieben 13. Mai 2005 Die eMail-Nummer gehört ja auch zu keiner der Aktionen, die ist davon unabhängig. Ich brauch sie aber für das Ergebnis trotzdem, und wie ich das in 2 Abfragen packe, erst eMail-Nummer dann Aktion, dabei haperts bei mir irgendwie. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Keo Geschrieben 13. Mai 2005 Teilen Geschrieben 13. Mai 2005 SELECT dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.errorcode, dsl_errorcodes.description, Max(dsl_data.emailnummer) AS [mailnummer], dsl_treatment.action, Max(dsl_treatment.date) AS [sortdate] FROM (dsl_data INNER JOIN dsl_errorcodes ON dsl_data.errorcode = dsl_errorcodes.code) INNER JOIN dsl_treatment ON dsl_data.auftragsnummer = dsl_treatment.auftragsnummer GROUP BY dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.errorcode, dsl_errorcodes.description, dsl_treatment.action ORDER BY Max(dsl_treatment.date) DESC; und so ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
shadoan Geschrieben 13. Mai 2005 Autor Teilen Geschrieben 13. Mai 2005 invalid use of GROUP-Function und zwar der Gruppenfunktion Max bei ORDER BY MAX(dsl_treatment.date) Aber danke trotzdem für deine Geduld Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Keo Geschrieben 13. Mai 2005 Teilen Geschrieben 13. Mai 2005 kein problem, bin eh gerad an der arbeit und hab ab und zu nix zu tun also ich nur ne loesung ueber die max funktion beim order by, was hast fuern sql server, oder ist das access? ich probier mal weiter wenn ich zu hause bin,so gegen 17uhr Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Keo Geschrieben 13. Mai 2005 Teilen Geschrieben 13. Mai 2005 hm, bis jetzt nix neues :/ das problem besteht ja darin das du es 2mal sortieren willst, einmal nach der mailnummer und einmal nach datum, aber ich bleib dran, bin selbst net so der sqler Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Keo Geschrieben 13. Mai 2005 Teilen Geschrieben 13. Mai 2005 manchmal sieht man echt die einfachsten sachen nicht :cool: wie waers mit: SELECT dsl_data.auftragsnummer, dsl_data.nachname, dsl_data.vorname, dsl_data.emailnummer, dsl_data.errorcode, dsl_errorcodes.description, dsl_treatment.aktion, dsl_treatment.datum FROM (dsl_data INNER JOIN dsl_treatment ON dsl_data.auftragsnummer = dsl_treatment.auftragsnummer) INNER JOIN dsl_errorcodes ON dsl_data.errorcode = dsl_errorcodes.errorcode ORDER BY dsl_data.emailnummer DESC , dsl_treatment.datum DESC; also so stimmt das schonmal mit der sortierung, jetzt fehlt noch das mit der letzten aktionsnummer, na mal schaun ps.: noch wegen spam oder so, ich haette das gern noch in den vorherigen post reingeschrieben, aber irgendwie konnte ich den nicht mehr aendern, najo Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Keo Geschrieben 13. Mai 2005 Teilen Geschrieben 13. Mai 2005 SELECT dsl_data.auftragsnummer, First(dsl_data.nachname) AS ErsterWertvonnachname, First(dsl_data.vorname) AS ErsterWertvonvorname, First(dsl_data.emailnummer) AS ErsterWertvonemailnummer, First(dsl_data.errorcode) AS ErsterWertvonerrorcode, First(dsl_errorcodes.description) AS ErsterWertvondescription, Last(dsl_treatment.aktion) AS LetzterWertvonaktion, Last(dsl_treatment.datum) AS LetzterWertvondatum FROM (dsl_data INNER JOIN dsl_treatment ON dsl_data.auftragsnummer = dsl_treatment.auftragsnummer) INNER JOIN dsl_errorcodes ON dsl_data.errorcode = dsl_errorcodes.errorcode GROUP BY dsl_data.auftragsnummer HAVING (((dsl_data.auftragsnummer)="gewuenschte auftragsnummer hier einfuegen :)")) ORDER BY Last(dsl_treatment.datum) DESC , Max(dsl_data.emailnummer) DESC; jetzt aber wirklich, musst es halt noch ein bisschen huebscher machen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.