*jiriki*: MySQL4.0.20: Komplizierte Anfrage

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?

  1. 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, last

    wobei "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

    1. 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*