SQL Sub select

Nighthawk1977

Enthusiast
Thread Starter
Mitglied seit
01.08.2001
Beiträge
523
Ort
Gummersbach
Hallo zusammen,

ich bräuchte mal jemanden, der sich mit SQL auskennt. Ich selbst hab mir nur ein bißchen was im Try & Error beigebracht. Vermutlich ist es wieder so einfach, dass ich nicht drauf komme...

Ich habe in der tabelle dataang u.a. die Auftragsnummer dataang.angnr und den Metallstichtag dataang.metz_stichtag. Letzterer gibt an, zu welchem Stichtag der Metallzuschlag berechnet wird.
In der tabelle datadelstat befinden sich die Historiendaten, also Datum und Kurs.

Was ich brauche ist ein select der mir die dataang.angnr, dataang.metz_stichtag und datadelstat.datum zusammen ausgibt. Der Haken ist allerdings, dass bei einem dataang.metz_stichtag vom 25.04. oder auch am 27.04. der Eintrag in der datadelstat der 24.04. wäre, also immer der Tag vorher, bei einem Wochenende entsprechend früher.

Meine beiden Einzelsql's wären

select dataang.angnr, dataang.metz_stichtag from dataang where dataang.angnr = 2242156
select max(datadelstat.datum) as datum_max from datadelstat where datadelstat.datum < '25.04.2015'

Im zweiten muss jedenfalls irgendwie dataang.metz_stichtag mit rein. Die beiden SQL's mit einem left join verbunden, aber ich weiß nicht genau wie.

Wer kann helfen?

Rauskommen muss:

dataang.angnr dataang.metz_stichtag datadelstat.datum
2242156 25.04.2015 24.04.2015
224215x 27.04.2015 24.04.2015
22421xx 28.04.2015 27.04.2015
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Wahrscheinlich nicht die performanteste Lösung aber:
Code:
select * from dataang as a, datadelstat as s where s.datum = (select max(datum) from datadelstat as s2 where s2.datum < a.metz_stichtag)
 
Hallo,

vielen Dank für Deine Hilfe! Funktionieren tut's grundsätzlich. Aber wie Du schon angemerkt hast, braucht's ziemlich lange, rund 90 Sekunden wenn ich das ganze auf eine Auftragsnummer aus der dataang eingrenze.

Ich bin mit der Verwendung der Aliasgeschichten noch nicht so ganz vertraut, deshalb war ich eigentlich von einem join ausgegangen. Wie gesagt, das bißchen was ich da kann, hab ich mir größtenteils via Google angelesen. Wenn ein Kaufmann via SQL und Crystal Reports Auswertungen bauen soll... :asthanos:

Habe jetzt mal unserem Betreuer beim Softwareanbieter mal eine Mail geschickt und mein Vorhaben geschildert. Vielleicht hat der noch einen Tip für mich. Kann jetzt aber vermutlich wieder ewig auf eine Antwort warten.
 
90 Sekunden damit er dir dann nur eine Zeile ausgibt? Das wäre noch deutlich lahmer als ich gedacht hätte. Ich denke normalerweise bräuchte man eine Zwischentabelle, die es erlaubt die beiden Daten mit einem einfachen "where" check aufeinander zuweisen zu können, da deren Beziehung weder logisch noch mathematisch einfach beschreibbar ist. So eine Tabelle müsste man dann täglich einmal aktualisieren.
 
probier mal

select *
from dataang as a, datadelstat as s, (select max(datum) as maxdatum from datadelstat as s2 where s2.datum < a.metz_stichtag) as m
where s.datum = m.maxdatum

ka ob das geht^^
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh