Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fehlerhafte Ausgabe bei SQL-Abfrage (https://www.delphipraxis.net/62626-fehlerhafte-ausgabe-bei-sql-abfrage.html)

buyden 7. Feb 2006 13:51

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:
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;
Allerdings zeigt er mir trotz DISTINCT alle Datensätze an. - Sicher weil ja kein Datensatz wirklich doppelt ist stimmts?
Aber wie kann ich das anders lösen.

RavenIV 7. Feb 2006 13:59

Re: Fehlerhafte Ausgabe bei SQL-Abfrage
 
versuche mal, ", status, datum, zeit" beim SELECT wegzulassen.

marabu 7. Feb 2006 14:17

Re: Fehlerhafte Ausgabe bei SQL-Abfrage
 
Eine correlated subquery sollte helfen:

SQL-Code:
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)
Grüße vom marabu

buyden 7. Feb 2006 14:19

Re: Fehlerhafte Ausgabe bei SQL-Abfrage
 
@ Raven IV
Die sollen ja aber auch mit im Grid angezeigt werden. :?

@ Marabu
Werd ich probieren.

buyden 7. Feb 2006 15:33

Re: Fehlerhafte Ausgabe bei SQL-Abfrage
 
Zitat:

Zitat von marabu
SQL-Code:
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)

Funktioniert. Aber nur mal zum Verständnis, was machst du denn mit dem "o" und dem "i"? :gruebel:

mkinzler 7. Feb 2006 15:36

Re: Fehlerhafte Ausgabe bei SQL-Abfrage
 
o und i sind Aliase für die Tabellennamen

buyden 7. Feb 2006 15:42

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? :?:

mkinzler 7. Feb 2006 15:50

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:
... from statistik i where i.auftrag ...
steht für
SQL-Code:
... from statistik where statistik.auftrag ...

buyden 7. Feb 2006 15:55

Re: Fehlerhafte Ausgabe bei SQL-Abfrage
 
Also vergleiche ich doch die Spalte Auftrag mit sich selbst
SQL-Code:
...WHERE statistik.auftrag = statistik.auftrag
Hab ich glaub ich verstanden. :lol:

Dankeschön.

mkinzler 7. Feb 2006 16:00

Re: Fehlerhafte Ausgabe bei SQL-Abfrage
 
Zitat:

Also vergleiche ich doch die Spalte Auftrag mit sich selbst
Mit verschiedenen "Instanzen" der Tabelle, deshalb sind in diesem Fall die Aliase auch notwendig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 Uhr.
Seite 1 von 2  1 2      

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