Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,
Ich habe möglicherweise etwas falsch verstanden, denn ich sehe das Problem nicht so ganz. Die Summen der Tagesmaxima für den August hast du ja schon selbst rausgefunden, geht es um alle Monate, ist das auch nicht weiter schlimm:
select substring(tag,1,7) as monat,sum(wert)
from (select substring(datum,1,10) as tag,max(werte) as wert
from t group by tag) as tageswerte group by monat;
MONAT SUM(WERT) 2014-08 105 2014-09 33 2015-01 42
Dein Beitrag war auch für mich äußerst hilfreich. Mit Dedlfix Aussage zum Temp-Table-Bezeichner der Unterabfrage (hier hieß er 'sub') und deinem Beitrag konnte ich mir dann endlich auch zusammenreimen, was ich falsch gemacht hatte.
Ich poste daher meine Lösung (sie ist eigentlich nur Deine, übersetzt auf meine Tabellenstruktur...) nochmal. Sie benutzt im Unterschied zu Klaus' Lösung eine Datetime-Spalte.
--Tabelle:
CREATE TABLE IF NOT EXISTS `inno_gruppieren` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`datum` DATETIME NOT NULL,
`wert` INT(11) NOT NULL,
PRIMARY KEY (`id`)
)
COMMENT='Übungen zum Filtern, Gruppieren, Summieren etc'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
CHECKSUM=1
AUTO_INCREMENT=1;
--Query:
select concat(year(tageswerte.datum),'-',month(tageswerte.datum)) as monat,
sum(maxwert) as monatssumme
from (select datum, date(t1.datum) as tag, max(wert) as maxwert
from inno_gruppieren t1 group by tag) as tageswerte group by monat;
Musterdaten:
id;datum;wert
1;2014-01-09 10:51:24;10
2;2014-01-09 10:52:23;15
3;2014-01-09 10:54:59;9
4;2014-02-09 11:00:54;0
5;2014-02-01 11:01:11;1
6;2014-02-01 10:30:00;5
7;2014-02-02 11:03:14;33
8;2014-02-07 11:03:47;20
9;2014-02-07 11:04:08;12
10;2014-02-07 11:04:32;17
11;2014-01-07 11:04:54;2
12;2014-02-07 11:05:16;45
13;2014-02-08 11:05:34;3
14;2014-04-17 11:05:54;22
15;2014-04-17 11:06:19;80
16;2014-01-17 11:06:42;1
17;2014-04-09 11:07:02;13
18;2014-05-01 11:07:31;22
19;2014-05-22 21:07:50;44
20;2014-05-01 11:08:14;7
21;2014-05-22 11:08:35;13
22;2014-05-01 11:08:59;88
Ergebnis:
"monat";"monatssumme"
"2014-1";"18"
"2014-2";"86"
"2014-4";"93"
"2014-5";"132"
Was hier besser deutlich wird ist, dass man im äußeren select den Temporärbezeichner der Unterabfrage benutzen muss, wenn man keine Fehlermeldung kassieren will:
/* SQL Fehler (1054): Unknown column 'datum' in 'field list' */
Spirituelle Grüße
Euer Robert
Möge der Forumsgeist wiederbelebt werden!