Jesus_666
12.05.2011, 14:03
Ich schreibe gerade an einer Kundenverwaltungssoftware für eine monatlich abzurechnennde Dienstleistung. Für das Abrechnungsmodul müssen wir wissen, für welche Kunden noch Rechnungen ausstehen. Konkret brauche ich eine Liste aller Kunde/Monat-Paare, in denen für den Kunden keine Rechnung vorhanden ist.
Was ich habe:
Tabelle `contracts`:
int `customer_id`
date `delivery_date` // Wann das Produkt geliefert wurde; ab hier wird abgerechnet
date `termination_date` // Wann der Vertrag gekündigt wurde; kann NULL sein
< weitere, hier unwichtige Felder>
Tabelle `invoices`:
varchar `id`
int `customer_id`
date `date`
<weitere, hier unwichtige Felder>
Tabelle `dates`: // Enthält eine monatsweise Liste aller Daten zwischen dem 1.1.2010 und dem 1.12.2059
date `date`
Der Einfachheit halber gehen wir davon aus, daß Kunden immer am Ersten eines Monats abgerechnet werden. Jeder Kunde hat exakt einen Vertrag.
Ich habe versucht, zu joinen und dann per WHERE abzufragen, wo für die Rechnungen nur NULL steht, aber damit komme ich auf keinen grünen Ast. Letztenendes brauche ich alle Zeilen aus `dates`, die nicht in `invoices` erwähnt werden, bis auf die, die außerhalb der Spanne `delivery_date`-`termination_date` liegen, aber ich kome nicht darauf, wie ich da rankomme.
Hat jemand eine sinnvolle Idee? Ich nehm' auch gerne eine, die in eine ganz andere Richtung geht, solange sie tut, was ich will, und nicht den ganzen Server lahmlegt.
Ach ja, falls der Dialekt relevant wird: Der Kram läuft auf MySQL 5.0.
Was ich habe:
Tabelle `contracts`:
int `customer_id`
date `delivery_date` // Wann das Produkt geliefert wurde; ab hier wird abgerechnet
date `termination_date` // Wann der Vertrag gekündigt wurde; kann NULL sein
< weitere, hier unwichtige Felder>
Tabelle `invoices`:
varchar `id`
int `customer_id`
date `date`
<weitere, hier unwichtige Felder>
Tabelle `dates`: // Enthält eine monatsweise Liste aller Daten zwischen dem 1.1.2010 und dem 1.12.2059
date `date`
Der Einfachheit halber gehen wir davon aus, daß Kunden immer am Ersten eines Monats abgerechnet werden. Jeder Kunde hat exakt einen Vertrag.
Ich habe versucht, zu joinen und dann per WHERE abzufragen, wo für die Rechnungen nur NULL steht, aber damit komme ich auf keinen grünen Ast. Letztenendes brauche ich alle Zeilen aus `dates`, die nicht in `invoices` erwähnt werden, bis auf die, die außerhalb der Spanne `delivery_date`-`termination_date` liegen, aber ich kome nicht darauf, wie ich da rankomme.
Hat jemand eine sinnvolle Idee? Ich nehm' auch gerne eine, die in eine ganz andere Richtung geht, solange sie tut, was ich will, und nicht den ganzen Server lahmlegt.
Ach ja, falls der Dialekt relevant wird: Der Kram läuft auf MySQL 5.0.