ich muss gestehen, dass ich ziemlicher Anfänger bin und vielleicht etwas Wesentliches übersehe. Ich erkläre mal das Szenario:
Ich habe 4 Tabellen:
rechnung (rg_nr, rg_datum)
rechnungsdetails (rgd_id, rgd_rg_nr, rgd_art_nr, rgd_menge) rgd_rg_nr hier ist gleich rg_nr von rechnung
preis (preis_id, preis_art_nr, preis_preis, preis_datum) preis_art_nr hier ist gleich rgd_art_nr von rechnungsdetails
artikel (art_nr, art_eh, art_name) Wird hierfür nicht gebraucht. art_nr hier ist gleich rgd_art_nr von rechnungsdetails und preis_art_nr von preis
Ich habe die DB mal zum Testen hochgeladen: http://wikisend.com/download/370568/rechnungtest.odb
Ich habe das so gemacht, weil ich an Preisen schrauben will, ohne dass sich nachträglich Rechnungbeträge ändern. Ich würde jetzt gerne eine SQL-Abfrage machen, die zu allen Rechnungspositionen den aktuellsten Preis gibt, aber das Gültigkeitsdatum nicht vor dem Rechnungsdatum liegt. Das verknüpfe ich dann später als Unterformular in einem Formular wo ich oben die Rechnungsnummern auswählen kann. Ich vermute, dass ich das zu umständlich mache, da ich mir die Befehle zusammengoogle. Meine Abfrage sieht momentan wie folgt aus:
Zunächst von jeder Rechnung die Nummer und das Datum ermitteln:
Code: Alles auswählen
Select "rg_nr" as "a_rg_nr", "rg_datum" as "a_rg_datum" from "rechnung"
Code: Alles auswählen
select "a"."a_rg_datum", "a"."a_rg_nr" as "b_rg_nr", "rgd_art_nr" as "b_rgd_art_nr", "rgd_menge" as "b_rgd_menge", "rgd_id" as "b_rgd_id" from "rechnungsdetails" Join
(Select "rg_nr" as "a_rg_nr", "rg_datum" as "a_rg_datum" from "rechnung")
as "a" on "rechnungsdetails"."rgd_rg_nr" = "a"."a_rg_nr"
Where "rechnungsdetails"."rgd_rg_nr" = "a"."a_rg_nr"
Das wiederum will ich mit der Preis-Tabelle verknüpfen (über die Artikelnummer der Tabelle der Rechnungsdetails).
Code: Alles auswählen
select "b"."a_rg_datum", "b"."b_rgd_id", "b"."b_rg_nr", "b"."b_rgd_art_nr", "b"."b_rgd_menge", "preis_preis", "preis_datum" from "preis" join
(select "a"."a_rg_datum", "a"."a_rg_nr" as "b_rg_nr", "rgd_art_nr" as "b_rgd_art_nr", "rgd_menge" as "b_rgd_menge", "rgd_id" as "b_rgd_id" from "rechnungsdetails" Join
(Select "rg_nr" as "a_rg_nr", "rg_datum" as "a_rg_datum" from "rechnung")
as "a" on "rechnungsdetails"."rgd_rg_nr" = "a"."a_rg_nr"
Where "rechnungsdetails"."rgd_rg_nr" = "a"."a_rg_nr")
as "b" on "preis"."preis_art_nr" = "b"."b_rgd_art_nr"
where "preis_datum" <= "a_rg_datum"
order by "b_rgd_id"
Wenn ich in Zeile 1 "MAX(preis_datum)....." oder ganz am Ende "GROUP BY "b_rgd_id"" verwende, knallt's... "Keine Aggregatfunktion" oder so ähnlich. Ich habe die Vermutung, dass ich mich zu umständlich anstelle. Hat jemand eine Idee, das sauber zu lösen?