PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   monatliche Bilanzen und Gesamtsummen in einer Abfrage (http://www.selfphp.de/forum/showthread.php?t=25386)

kriztan 18.09.2014 19:06:53

monatliche Bilanzen und Gesamtsummen in einer Abfrage
 
Hallo Leute,

ich habe eine MYSQL Tabelle nach folgendem Muster:
Gesamt ist eine fortlaufende Summe aus div. unterschiedlichen Spalten, die ich hier gesondert ablege.

Code:

ID|Datum    |Betrag|Gesamt
---------------------------
1 |2013-01-25|-10.00|-25.50
2 |2013-02-10| 12.00|-13.00
3 |2014-05-20|-25.00|-38.00
4 |2014-09-08| 40.00|  2.00

usw...

Nun möchte ich daraus die Daten so zusammenfassen, dass jeweils am Monatende eine Bilanz des
laufenden Jahres und des Vorjahres dargestellt wird. Zusätzlich soll die Gesamtsumme am Ende
des jeweiligen Monats angezeigt werden.

Code:

Monat|Jahr  |Vorjahr|Gesamt
----------------------------
01  |-13.78 |-25.68 | 0.00
02  | 71.79 | 11.03 | 0.00
03  | 13.80 | 30.86 | 0.00
04  |  2.45 | 43.94 | 0.00
05  | 87.19 |-38.46 | 0.00
06  |-68.90 | 72.43 | 0.00
07  |-70.74 |-95.85 | 0.00
08  | 64.14 |  4.90 | 0.00
09  |-18.37 | 16.52 | 0.00
10  |  0.00 | 61.45 | 0.00
11  |  0.00 | 45.55 | 0.00
12  |  0.00 | 39.17 | 0.00

Ich habe dazu bisher folgenden MySQL Code, mit dem bis auf die Gesamtsumme auch alles funktioniert.


Code:

SELECT
        DATE_FORMAT(Datum, '%m') as monat,
        SUM(IF(DATE_FORMAT(Datum, '%Y') = '2014', Betrag, 0.00)) AS jahr,
        SUM(IF(DATE_FORMAT(Datum, '%Y') = '2013', Betrag, 0.00)) AS vorjahr,
        IF(DATE_FORMAT(Datum, '%Y') = '2014', gesamt, 0) AS gesamt
FROM kb_eintrag
LEFT JOIN (
        SELECT
                DATE_FORMAT(datum,'%m') AS d,
                MAX(DATE_FORMAT(datum,'%d')) AS dmax,
                MAX(Eintrag_ID) AS ID
        FROM kb_eintrag
        WHERE DATE_FORMAT(Datum, '%Y') = '2014'
        GROUP BY DATE_FORMAT(Datum,'%m')
        ORDER BY NULL
) m
ON DATE_FORMAT(Datum,'%Y-%m') = m.d
AND Eintrag_ID = m.ID

WHERE DATE_FORMAT(Datum, '%Y') BETWEEN '2013' AND '2014'
AND Kategorie > 1
GROUP BY DATE_FORMAT(Datum, '%m')
ORDER BY DATE_FORMAT(Datum, '%m') ASC

Wer kann mir dabei helfen?

pguser 19.09.2014 07:14:25

AW: monatliche Bilanzen und Gesamtsummen in einer Abfrage
 
Zitat:

Zitat von kriztan (Beitrag 146976)

Nun möchte ich daraus die Daten so zusammenfassen, dass jeweils am Monatende eine Bilanz des
laufenden Jahres und des Vorjahres dargestellt wird. Zusätzlich soll die Gesamtsumme am Ende
des jeweiligen Monats angezeigt werden.

Wer kann mir dabei helfen?

Mir ist nicht klar, wie Du von den oberan Zahlen auf die unteren kommst.

kriztan 19.09.2014 09:58:23

AW: monatliche Bilanzen und Gesamtsummen in einer Abfrage
 
Das oben ist nur ein Muster, die Tabelle hat mehrere tausend Einträge... Das wollte ich nicht alles 1:1 hier eingeben :D

Ckaos 24.09.2014 09:05:31

AW: monatliche Bilanzen und Gesamtsummen in einer Abfrage
 
Moin,

geht bestimmt noch eleganter...
Code:

Select Monat,
(select sum(Betrag) as vbetrag FROM `kb_eintrag` as vorjahr where month(vorjahr.Datum)=alleMonate.Monat and year(vorjahr.Datum)=year(now())) as Jahr,
(select sum(Betrag) as vbetrag FROM `kb_eintrag` as vorjahr where month(vorjahr.Datum)=alleMonate.Monat and year(vorjahr.Datum)=year(date_sub(now(),interval 1 year))) as Vorjahr
from (select distinct(month(Datum)) as Monat from kb_eintrag order by month(Datum)) as alleMonate

MfG

CKaos

kriztan 25.09.2014 08:06:29

AW: monatliche Bilanzen und Gesamtsummen in einer Abfrage
 
Zitat:

Zitat von Ckaos (Beitrag 146998)
Moin,
geht bestimmt noch eleganter...

Moin,
vielen Dank. Aber den Part, den Du mir geschickt hast, habe ich wie folgt gelöst:
Code:

SELECT DATE_FORMAT(Datum, '%m') as monat,
                SUM(IF(DATE_FORMAT(Datum, '%Y') = '2014', Betrag, 0.00)) AS jahr,
                                SUM(IF(DATE_FORMAT(Datum, '%Y') = '2013', Betrag, 0.00)) AS vorjahr
                                                FROM kb_eintrag
                                                WHERE DATE_FORMAT(Datum, '%Y') BETWEEN '2013' AND '2014'
                                                                AND Kategorie > 1
                                                                GROUP BY DATE_FORMAT(Datum, '%m')
                                                                ORDER BY DATE_FORMAT(Datum, '%m') ASC

Die Ergebnisse Deiner und meiner Abfrage sind identisch.

Leider kann ich damit noch nicht die Gesamtsumme am Ende des jeweiligen Monats anzeigen lassen. Also die Daten aus der Spalte Gesamt am letzten Tag des Monats (der nicht zwangsläufig der letzte Kalendertag sein muss).


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:59:42 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.