Forum: Datenbanken
by jobo,
8. Feb 2019
Ok, das bedeutet, Dein Datumsfeld ist ein Ganzzahltyp?!
Würdest Du ein Datumstyp nehmen, wäre das andere Problem, von dem Du anschließend schreibst, nicht auftreten.
Ändert nichts daran, dass mein letzter Vorschlag helfen soll. Vorausgesetzt es gibt einen Index auf dem Feld und keine anderen Überraschungen.
Forum: Datenbanken
by jobo,
8. Feb 2019
@jumpy, DeddyH
Ich denke, jumpy meint die Mehrfachausgabe der AuftrNr.
So ist es sicher und vielleicht auch etwas abgehärtet gegen Optimizer "Irrtümer":
select A.*
from Auftragsdaten A
join (select distinct AuftragsNr
from Auftragsdaten
where A2018.Fertigdatum between :anfang and :ende) A2018
Forum: Datenbanken
by jobo,
8. Feb 2019
Ja, Du hast Recht, hab ich übersehen.
Also
select *
from Auftragsdaten A
join Auftragsdaten A2018
on A.AuftragsNr = A2018.AuftragsNr
where A2018.Fertigdatum between :anfang and :ende
@DeddyH: Ich beschwer mich nicht, hab es ja tatsächlich nicht mal halbwegs formatiert und ja.
Forum: Datenbanken
by jobo,
8. Feb 2019
ich sehe da nicht, warum Du ein "where in" brauchst, wenn es auf einundderselben Tabelle abgefragt wird.
Außerdem würde ich ein "where in" -das m.E. nur für sowas wie "enums" gedacht ist bei großen Mengen immer als Join umformen.
Zuletzt würde ich niemals bei derartigen Abfragen mit Funktionen wie year() arbeiten. Derartiges immer mit einer Bereichsabfrage "<datefield> between <vondate> and...