![]() |
Datenbank: MySQL • Version: 4.1 • Zugriff über: ZEOS
Fehlerhafte Ausgabe bei SQL-Abfrage
Hi,
Ich hab mal wieder ein kleines SQL-Problemchen. Ich habe ein DBgrid, in dem alle bearbeiteten Aufträge von einem Tag angezeigt werden sollen. Es wird bei jeder Statusänderung in einem Auftrag automatisch ein neuer Datensatz in einer Statistiktabelle angelegt, der Auftragsnummer, Status, Datum und Urzeit beinhaltet. Es kann also sein, das von einem Auftrag mehrere Einträge an einem Tag stammen. In dem Grid soll jetzt aber nur der Letzte Eintrag jedes Auftrages an diesem Tag erscheinen. Ich hab dafür folgenden Code:
Delphi-Quellcode:
Allerdings zeigt er mir trotz DISTINCT alle Datensätze an. - Sicher weil ja kein Datensatz wirklich doppelt ist stimmts?
with frmdata.qubearbeitet do
begin sql.Clear; sql.Add('SELECT DISTINCT(auftrag), status, datum, zeit FROM statistik WHERE datum = '''+formatdatetime('yyyy-mm-dd',dtpbearbeitet.date)+''' AND techniker = "'+config.ReadString('Grundeinstellungen','Technikernummer','0')+'";'); open; end; Aber wie kann ich das anders lösen. |
Re: Fehlerhafte Ausgabe bei SQL-Abfrage
versuche mal, ", status, datum, zeit" beim SELECT wegzulassen.
|
Re: Fehlerhafte Ausgabe bei SQL-Abfrage
Eine correlated subquery sollte helfen:
SQL-Code:
Grüße vom marabu
SELECT auftrag, status, datum, zeit
FROM statistik o WHERE datum = :datum AND techniker = :techniker AND zeit = (select max(zeit) from statistik i where i.auftrag = o.auftrag) |
Re: Fehlerhafte Ausgabe bei SQL-Abfrage
@ Raven IV
Die sollen ja aber auch mit im Grid angezeigt werden. :? @ Marabu Werd ich probieren. |
Re: Fehlerhafte Ausgabe bei SQL-Abfrage
Zitat:
|
Re: Fehlerhafte Ausgabe bei SQL-Abfrage
o und i sind Aliase für die Tabellennamen
|
Re: Fehlerhafte Ausgabe bei SQL-Abfrage
Ich kannte das nur mit ... AS ...
Dann sind die beiden ja in dem Fall Aliase für ein und die selbe Tabelle was bedeutet, das ich das Feld mit sich selbst vergleiche oder? :?: |
Re: Fehlerhafte Ausgabe bei SQL-Abfrage
mit as setzt du ein Alias für einen Spaltennamen, mit dem du dann später eine Spalte adressieren kannst (nützlich bei Verwendung von Aggregatfunktionen oder bei Joins). Der hier verwendete Alias ist für Tabellennamen so das man in der Abfrage nicht immer den ganzen Tabellenname schreiben muss.
SQL-Code:
steht für
... from statistik i where i.auftrag ...
SQL-Code:
... from statistik where statistik.auftrag ...
|
Re: Fehlerhafte Ausgabe bei SQL-Abfrage
Also vergleiche ich doch die Spalte Auftrag mit sich selbst
SQL-Code:
Hab ich glaub ich verstanden. :lol:
...WHERE statistik.auftrag = statistik.auftrag
Dankeschön. |
Re: Fehlerhafte Ausgabe bei SQL-Abfrage
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz