Robert R.: Abfrageproblem bei MySQL

Beitrag lesen

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!