Hallo Alain,
wie immer ist es von Vorteil, ein komplettes Beispiel plus Testdaten mit zu liefern.
Rate ich also mal folgenes..
CREATE TABLE rechnen (
id INT NOT NULL,
datum DATE NOT NULL,
knz INT NOT NULL,
pNr INT NOT NULL,
state INT NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO rechnen VALUES
( 1, '2012-04-02', 0, 12, 100),
( 2, '2012-04-02', 1, 13, 100),
( 3, '2012-04-03', 0, 4, 100),
( 4, '2012-04-03', 1, 7, 100),
( 5, '2012-04-04', 0, 22, 100),
( 6, '2012-04-04', 1, 5, 100),
( 7, '2012-04-05', 0, 10, 100),
( 8, '2012-04-05', 1, 30, 100),
( 9, '2012-04-10', 0, 9, 100),
(10, '2012-04-10', 1, 6, 100);
SELECT heute.datum, heute.anz1, heute.anz2, heute.anz_ges, gestern.anz_ges_vt
FROM ( SELECT datum,
SUM( CASE knz
WHEN 0 THEN pNr
ELSE 0
END) AS anz1,
SUM( CASE knz
WHEN 1 THEN pNr
ELSE 0
END) AS anz2,
SUM( CASE knz
WHEN 0 THEN pNr
WHEN 1 THEN pNr
ELSE 0
END) AS anz_ges
FROM rechnen
GROUP BY datum
) heute
LEFT JOIN ( SELECT datum,
SUM( CASE knz
WHEN 0 THEN pNr
WHEN 1 THEN pNr
ELSE 0
END) AS anz_ges_vt
FROM rechnen
GROUP BY datum
) gestern
ON heute.datum = DATE_ADD(gestern.datum, INTERVAL 1 DAY )
ORDER BY heute.datum;
+------------+------+------+---------+------------+
| datum | anz1 | anz2 | anz_ges | anz_ges_vt |
+------------+------+------+---------+------------+
| 2012-04-02 | 12 | 13 | 25 | NULL |
| 2012-04-03 | 4 | 7 | 11 | 25 |
| 2012-04-04 | 22 | 5 | 27 | 11 |
| 2012-04-05 | 10 | 30 | 40 | 27 |
| 2012-04-10 | 9 | 6 | 15 | NULL |
+------------+------+------+---------+------------+
5 rows in set (0.00 sec)
mysql>
Das Ergebnis sieht ganz nett aus. Problem ist der 10.04.2012, da es da keinen echten Vortag gibt.
Wenn dies nicht ausreicht, dann bitte ein vollständiges Beispiel zusammenstellen:
a) CREATE TABLE von allen beteiligten Tabellen ( z. B. mysql>SHOW CREATE TABLE tbl1; )
b) passende Testdaten (INSERT ...) zu allen beteiligten Tabellen
c) Das Ergebnis dass jetzt rauskommt
d) das erwünschte Ergebnis
Grüße
Thomas