Vinzenz Mai: MySQL GROUP: Ist ein bestimmter Wert enthalten?

Beitrag lesen

Hallo,

dafür ist die HAVING-Klausel zuständig.

Die HAVING- Klausel kenne ich, die greift aber erst, *nach* dem GROUP BY

Ich liste Orte auf (GROUP BY orte), zu jedem Ort gebe ich die Anzahl von Events an. Nun möchte ich wissen, ob *heute* ein Event dabei ist: Dann markiere ich den Ort besonders.

das war mir nicht klar :-(

Wie üblich gibt es verschiedene Möglichkeiten, Dein Problem zu lösen. Ersetze zunächst in Deiner Abfrage die Datumsspalte durch eine berechnete Spalte, die so aussieht wie Deine:

SELECT  
   spaltenliste,  
   -- ich nehme an, die Spalte "tag" ist vom Datentyp DATE :-)  
   IF(trm1.tag = [link:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_curdate@title=CURDATE()], 1, 0)  
FROM  
    trm1  
[...]

Nun hast Du bei Deinen Datensätzen genau dann eine 1 stehen, wenn heute ein Event ist, sonst eine 0. Daher kannst Du das von Dir gewünschte Ergebnis bekommen, wenn Du nun beim Gruppieren MAX() auf diese berechnete Spalte anwendest:

SELECT  
    spaltenliste,  
    MAX(IF(trm1.tag = CURDATE(), 1, 0)) heute  
FROM  
    trm1  
[...]  
GROUP BY  
    ort,  
    [...]  

Nun hast Du in "heute" genau dann eine 1 stehen, wenn am Ort heute ein Event stattfindet.

Freundliche Grüße

Vinzenz