MySQL4.0.20: Komplizierte Anfrage
*jiriki*
- datenbank
0 Vinzenz Mai0 *jiriki*
Moin,
Ich hab zwei Tabellen "vertrag" und "rechnung", wobei in "rechnung" alle Rechnungen zu den in "vertrag" festgehaltenen Verträgen abgelegt sind.
Ich möchte nun in einer Abfrage zu jedem Vertrag das Datum der letzten zugehörigen Rechnung haben, falls denn schon eine verschickt wurde. Wenn noch keine Rechnung verschickt wurde, soll das Vertragsbeginndatum stattdessen genommen werden.
Ich hab also folgende relevanten Tabellenspalten:
vertrag:
vertrags_id, start
rechnung:
vertrags_id, rechnungs_id, datum
In meiner Ergebnistabelle result möchte ich nun folgende Einträge haben:
result:
vertrags_id, rechnungs_id, last
wobei "last" vorrangig das Datum der letzten zugehörigen Rechnung speichert( "datum" ), und ansonsten das Vertragsbeginndatum ( "start" ).
Danke für jede Hilfe. *jiriki*
P.S.: Wo ist mein letzter Thread "(DATENBANK) SQL Abfrage über drei Tabellen" hingekommen?
Hallo jiriki
Ich hab zwei Tabellen "vertrag" und "rechnung", wobei in "rechnung" alle Rechnungen zu den in "vertrag" festgehaltenen Verträgen abgelegt sind.
Ich möchte nun in einer Abfrage zu jedem Vertrag das Datum der letzten zugehörigen Rechnung haben, falls denn schon eine verschickt wurde. Wenn noch keine Rechnung verschickt wurde, soll das Vertragsbeginndatum stattdessen genommen werden.
http://dev.mysql.com/doc/mysql/en/example-maximum-column-group-row.html sollte Dir prinzipiell helfen, daneben benötigst Du noch einen LEFT OUTER JOIN und vielleicht IFNULL ...
In meiner Ergebnistabelle result möchte ich nun folgende Einträge haben:
result:
vertrags_id, rechnungs_id, lastwobei "last" vorrangig das Datum der letzten zugehörigen Rechnung speichert( "datum" ), und ansonsten das Vertragsbeginndatum ( "start" ).
P.S.: Wo ist mein letzter Thread "(DATENBANK) SQL Abfrage über drei Tabellen" hingekommen?
Der dürfte im Moment im Niemandsland zwischen Forumshauptdatei und Archiv sein, morgen ist er bestimmt im Archiv zu finden.
Freundliche Grüße
Vinzenz
Sehr schön. Danke. Ich habs jetzt in folgender SELECT-Abfrage resultieren lassen:
SELECT
v.kunden_nr, v.vertrags_nr,
MAX( rechnungs_nr) as rechnungs_nr,
MAX( IFNULL( abrechnung, date_add( start, INTERVAL - intervall MONTH ) ) ) as abrechnung
FROM
kunden_vertrag as v
LEFT JOIN
kunden_rechnung as r
ON
v.vertrags_nr = r.vertrags_nr
GROUP BY
vertrags_nr;
Es sucht mir den Wert von "abrechnung" - falls vorhanden - und ansonsten den leicht modifizierten Werte von "start".
Grüßle, *jiriki*