[MySQL] Knifflige SQL Abfrage

C22

Mitglied
Hallo Forum,
bräuchte etwas Hilfe bei einer kniffligen Anforderung. Plattform: PHP4 und MySQL 4.0.27.

Die Tabelle hat folgende Struktur:

Id | Vorgang | Betrag | Start (date) | Ende (date)
-----------------------------------------------------------------------------------
1 | Vorgang1 | 1000,00 | 2006-04-01 | 2006-04-20
2 | Vorgang2 | 3000,00 | 2006-04-20 | 2006-05-05
3 | Vorgang3 | 5000,00 | 2006-05-21 | 2006-07-10

Jeder Vorgang hat also Beschreibung, Betrag ein Anfangsdatum und ein Enddatum.

Jetzt muss ich in einer Jahresübersicht für jeden Kalendermonat die Vorgänge herausfinden, die in diesem Kalendermonat laufen, und dabei den Betrag im Verhältnis der Tage dieses Monats summieren.

Vorgang1 würde also zu 100% in den April laufen (1000).
Vorgang2 hat 10 Tage im April und 5 Tage im Mai, also gehen 2000 in den April und 1000 in den Mai.
Vorgang3 hat 10 Tage im Mai, 30 Tage in Juni und 10 Tage im Juli. -> 50 Tage. -> 1/5 geht in den Mai (1000), 3/5 in den Juni (3000), 1/5 in den Juli (1000).

also hätte ich am Ende für den April 3000, Mai 2000, Juni 3000 und Juli 1000.

Wäre sehr dankbar für einen Lösungsansatz.

mfg
 
Ab MySQL 4.1.1 gibt es
LAST_DAY(date)

Takes a date or datetime value and returns the corresponding value for the last day of the month. Returns NULL if the argument is invalid.

Damit wäre eventuell eine Lösung in SQL möglich.

Da du aber noch eine 4.0 Version hast würde ich dir empfehlen die Daten direkt aus der Tabelle auszulesen und dann mit PHP weiterzuverarbeiten, da dieses deutlich bessere Methoden zur Verarbeitung von Daten bieten sollte. Denn du musst ja eine Möglichkeit haben herauszufinden wieviele Tage ein bestimmter Monat überhaupt hat.

Du könntest dir dann ein Array mit 12 Einträgen für jeden Monat anlegen in welchem du dann die Werte aufaddieren kannst.

Für jede Tabellenzeile musst du dann mit entsprechenden Datumsfunktionen herausfinden wie die Anteile sind, dies dann mit dem Wert multiplizieren und am entsprechenden Array-Punkt aufaddieren.

Genaues dazu solltest du im PHP Manual finden.
 
Zurück