echo $begrüßung;
mittels folgender Abfrage ermittle ich die Anzahl der Einträge pro Jahr:
SELECT YEAR(date), COUNT(*) FROM table GROUP BY 1 ORDER BY 1;
Willst du da nicht lieber über das Jahr gruppieren?
Wie kann ich nun noch einen zufälligen Dateinamen mit ausgeben?
SELECT YEAR(date), COUNT(*), RAND(datei) FROM table GROUP BY 1 ORDER BY 1;
Das geht nur bei MySQL, aber das ist kein echter Zufall sondern nur irgendein Wert, der da grad rumliegt. Nimm einfach die Dateinamensspalte in die Select-Klausel. Alle anderen Datenbanksysteme außer MySQL lassen es aber nicht zu, Spalten, nach denen nicht gruppiert (und keine Aggregatfunktion angewendet) wurde, in das Abfrageergebnis zu nehmen, eben aus dem Grund, weil dabei nicht ermittelt werden kann, welcher denn nun aus der Gruppe genommen werden soll. MySQL nimmt dann einen nach Belieben. Das kann am Ende immer der gleiche sein, was dir wahrscheinlich für deinen Zufall nicht viel nützt.
Vielleicht geht es mit einer korrelierten Unterabfrage, mit der du für das (gruppierte) Jahr alle Dateinamen nimmst, diese nach Zufall sortierst (ORDER BY RAND()) und mit LIMIT 1 einen davon auswählst. Diese Subquery stellst du als weiterte Spalte in die Select-Klausel.
echo "$verabschiedung $name";