Hi,
ich habe eine Statistiktabelle, die pro Webseiten-Besuch den Startzeitpunkt des Besuchs in eine Tabelle mit nur einer DATETIME-Spalte schreibt.
Code:
CREATE TABLE `visits`(
`dt` DATETIME,
INDEX(`dt`)
)
Ziel ist nun, den Monat mit den meisten Besuchen in einem bestimmten Jahr ausfindig zu machen.
Dazu habe ich die Besuche pro Monat eines bestimmten Jahres (@year) in eine temporäre Tabelle überführt:
Code:
CREATE TEMPORARY TABLE `tmp_visits`(
`d` DATE,
`visits` INT
) ENGINE MEMORY;
INSERT INTO `tmp_visits`
SELECT CONCAT_WS('-', YEAR(`dt`), LPAD(MONTH(`dt`), 2, '0'), '01') AS 'd',
COUNT(*) AS 'visits'
FROM `visits` WHERE YEAR(`dt`)=@year GROUP BY MONTH(`dt`);
Mit folgender Abfrage kann ich ja nun die höchste Besucherzahl in einem Monat in dem Jahr ausfindig machen:
Code:
SELECT MAX(`visits`) FROM `tmp_visits`
Ich würde aber gerne den Monat des Jahres gleichzeitig mit gewinnen.
Nun kann ich das bisher nur mit zwei Abfragen erreichen:
Code:
SELECT @maxVisits:=MAX(`visits`) AS 'Meiste Besuche/Monat'
FROM `tmp_visits`;
SELECT DATE_FORMAT(`d`, '%m/%Y') AS 'Monat(e)/Jahr,
`visits` AS `Besuche` FROM `tmp_visits` WHERE `visits`=@maxVisits;
Wie krieg ich denn den Monat in der gleichen Abfrage raus, in der ich den Monat mit den meisten Besuchern mit MAX() bestimme? Bzw. geht das überhaupt? Habe da noch mit HAVING rumprobiert, hat aber alles nicht das rechte Ergebnis gebracht.
Habt ihr eine Idee?