Group by [ERLEDIGT]

Advantage Database Server

Moderator: Moderatoren

UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Group by [ERLEDIGT]

Beitrag von UliTs »

Manfred hat geschrieben: Mo, 06. Dez 2021 20:35 die dbf wird sequentiell gefüllt. Ohne Index. Also so wie Du vermutet hast Uli.
Ich bin verwirrt. Das hat mit einem Index doch nichts zu tun. Es geht mir um folgendes: um einen Datensatz in der Tabelle Tankbeleg eindeutig zu identifizieren, würde ich der Tabelle Tankbeleg ein numerisches Feld "Id" hinzufügen, welches automatisch aufsteigend beim Anlegen von Datensätzen gefüllt wird. Wenn die Tankbelege je Fahrzeug in chronologischer Reihenfolge eingegeben werden, bedeutet dies, dass ich durch max(Id) den jeweils letzten Tankbeleg rasend schnell finden und identifizieren kann.
Wenn ich Dich richtig verstehe, kann man genauso vorgehen und dann wird es rasend schnell :D .
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
BJelinek
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 218
Registriert: Sa, 02. Jun 2012 20:57
Wohnort: 73257 Köngen
Hat sich bedankt: 9 Mal
Danksagung erhalten: 3 Mal

Re: Group by [ERLEDIGT]

Beitrag von BJelinek »

Wenn Belege manuell erfasst werden
besteht die Gefahr, daß Neuere Belege zuerst erfasst werden und ältere danach.
Grüße
Bernd

Mitglied des Deutschsprachige Xbase-Entwickler e. V.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Group by [ERLEDIGT]

Beitrag von UliTs »

Ja, deshalb auch meine Nachfrage bei Manfred. Allerdings kann man in so einem Fall, dass für das gleiche Fahrzeug ein Beleg mit älterem Datum nach einem mit neuerem Datum erfaßt wird, im Hintergrund automatisiert die Id entsprechend anpassen. Ist halt etwas mehr Aufwand.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9355
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Group by [ERLEDIGT]

Beitrag von Tom »

Wenn man statt der ID einen üblichen Timestamp-Algorithmus anwendet (etwa Tage seit dem 1.1.1970 mal 100.000 plus Zeit seit Mitternacht in Sekunden), hat man auch immer den neuesten zuletzt/zuoberst, bezogen auf das Datum und die Uhrzeit des Belegs. Aber ohne Index wird das nicht gehen.
Herzlich,
Tom
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 852
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: Group by [ERLEDIGT]

Beitrag von Marcus Herz »

Ich hab das mal nach ADT mit einem Timestamp im Tankbuch convertiert.
Das ist ja eigentlich eine Standard Abfrage: Parent mit dem neuesten Child.

Code: Alles auswählen

SELECT fz.kfznr, 
   fz.tachostand,
   tb.tankdatum,
   tb.kmstand,
   tb.menge,
   hs.bez AS hersteller, 
   fza.bez AS Fahrzeugart
FROM FAHRZEUGe fz
LEFT JOIN (
   select a.* from tankbuch a 
   inner join(
   select max(tankts) as tankts from tankbuch
   group by kfznr
   ) b on a.tankts = b.tankts ) tb on tb.kfznr = fz.kfznr
LEFT JOIN hersteller hs ON hs.id=fz.idherstell
LEFT JOIN fahrzeugarten fza ON fza.id=idaufbau
order by 1
Der Timstamp im Tankbuch macht den Unterschired. Den kannst du ja auch in DBF nachzeihen.
Bei mir benötigt diese Abfrage mitt deinen Daten incl Order By 1,1 sec. Das ist auch das was ich an Performance erwarte
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Group by [ERLEDIGT]

Beitrag von UliTs »

Tom hat geschrieben: Di, 07. Dez 2021 13:48 ... Aber ohne Index wird das nicht gehen.
Ohne Index wird das nicht schnell genug gehen 😉.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Group by [ERLEDIGT]

Beitrag von UliTs »

Marcus Herz hat geschrieben: Di, 07. Dez 2021 15:13 ... Bei mir benötigt diese Abfrage mit deinen Daten incl Order By 1,1 sec. ...
Es wundert mich, dass das so langsam sein soll.
Außerdem darf der TimeStamp nicht doppelt für das gleiche Fahrzeug vergeben werden.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 852
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: Group by [ERLEDIGT]

Beitrag von Marcus Herz »

- Das Tankbuch hat 40.000 Sätze
- Gleicher Timestamp für eine Tankung: ist ja nur mit Doppelerfassung möglich, dann stimmt ja auch die Abrechnung nicht.
- Index hab ich nur auf Tankbuch (KFZNR) erzeugt,
- DIe anderen Tabellen sind ja sowieo ganz klein. Da brauchts für dieses Testszenario nichts.
- Performance, es gibt bessere Server, meine Hardware liefert nur relative Aussage, 1.1 sec mit Order By find ich trotzdem nicht schlecht.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Antworten