![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: UniDac
in-Klausel in großen Tabellen
Hallo Zusammen,
ich komme bei einer Abfrage leider nicht weiter und bitte Euch um Hilfe. Ich habe eine sehr große Tabelle mit Auftragsdaten aus mehrere Jahren. Die Tabelle ich so vereinfacht aufgebaut: AuftragsNr-----Arbeitsgang------Fertigdatum 4710815------------10------------20181215 4710815------------20------------20181218 4710815------------30------------20181223 4710815------------40------------20190110 4710815------------50------------20190115 7878787------------10------------20181015 7878787------------20------------20181018 7878787------------30------------20181023 7878787------------40------------20181110 7878787------------50------------20181115 5656565------------10------------20190115 5656565------------20------------20190118 5656565------------30------------20190123 5656565------------40------------20190210 5656565------------50------------20190215 andere Aufträge. Ich brauche jetzt eine Abfrage, die mir alle Aufträge mit allen Arbeitsgänge auswirft, die bei einem Arbeitsgang das Fertigdatum in 2018 haben. Also soll das Ergebnis so aussehen: AuftragsNr-----Arbeitsgang------Fertigdatum 4710815------------10------------20181215 4710815------------20------------20181218 4710815------------30------------20181223 4710815------------40------------20190110 4710815------------50------------20190115 7878787------------10------------20181015 7878787------------20------------20181018 7878787------------30------------20181023 7878787------------40------------20181110 7878787------------50------------20181115 Den Auftrag 5656565 nicht, weil er keinen Arbeitsgang hat, der in 2018 abgeschlossen wurde. Mein Versuch
Delphi-Quellcode:
Aber weil die Tabelle recht groß ist, raucht mir die Abfrage ab. Hat jemand eine schlauere Lösung, die ich ausprobieren könnte?
select * from tabelle
where AuftragNr in ( select AuftragNr from Tabelle where Year(FertigDatum) = 2018 group by AuftragNr) Vielen Dank Patrick |
AW: in-Klausel in großen Tabellen
eventuell sowas?
SQL-Code:
select * from tabelle a where exists (select 1 from tabelle b where Year(b.Fertigdatum) = 2018 and a.AuftragsNr = b.AuftragsNr)
|
AW: in-Klausel in großen Tabellen
Ist es unbedingt notwendig, eine Unterabfrage zu verwenden?
|
AW: in-Klausel in großen Tabellen
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 <bisdate>" damit sollte es auf jeden Fall flott sein, wenn auf dem Datefield ein Index liegt und der Zugriff darauf nicht durch andere Sachen vermasselt wird. |
AW: in-Klausel in großen Tabellen
Also eher sowas?
SQL-Code:
select * from tabelle a where exists (
select 1 from tabelle b where a.AuftragsNr = b.AuftragsNr and b.Fertigdatum between CAST('2018-01-01' AS DATE) and CAST('2018-12-31' AS DATE) ) |
AW: in-Klausel in großen Tabellen
Code:
select * from tabelle where Fertigdatum > 20180000 and fertigdatum < 20190000
|
AW: in-Klausel in großen Tabellen
Eher so:
SQL-Code:
select * from tabelle where Fertigdatum >= '2018-01-01' and Fertigdatum <= '2018-12-31'
|
AW: in-Klausel in großen Tabellen
Zitat:
|
AW: in-Klausel in großen Tabellen
Ich will auch mal:
Delphi-Quellcode:
SELECT [Feldliste] FROM [Tabelle] WHERE Fertigdatum BETWEEN :anfang AND :ende
|
AW: in-Klausel in großen Tabellen
sag ich doch
;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 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