Допущения:
- Дата, которую вы хотите отобразить, - это неделя понедельника для этой недели
- Ваш основной вывод -
Week <week number>-<monday date of week>, Visits: <count>.
- Вы знаете достаточноPHP, чтобы иметь возможность получить столбец
Phrase
Следующая команда SQL должна отображать для вас количество сеансов за неделю года, неделю года и нужную фразу:
SELECT COUNT(session) AS VisitCount
, WEEKOFYEAR(timestamp) AS WeekOfYear_Value
, MAKEDATE(
CASE
WHEN WEEKOFYEAR(timestamp) = 52
THEN YEAR(timestamp)-1
ELSE YEAR(timestamp)
END, (WEEKOFYEAR(timestamp) * 7)-4) AS DateOfWeek_Value
, CONCAT('Week ', WEEKOFYEAR(timestamp)
, '-', MAKEDATE(
CASE
WHEN WEEKOFYEAR(timestamp) = 52
THEN YEAR(timestamp)-1
ELSE YEAR(timestamp)
END, (WEEKOFYEAR(timestamp) * 7)-4) -- Monday
, ', Visits: ' , COUNT(session), '.') AS Phrase
FROM stats
GROUP BY WEEKOFYEAR(timestamp)
ORDER BY timestamp ASC
Попробуйте это на ваших существующих данных.
[править: дополнительные изменения кода]
Чтобы получить выходные данные по воскресеньям:
SELECT COUNT(session) AS VisitCount
, WEEKOFYEAR(timestamp) AS WeekOfYear_Value
, CONCAT('Week ', WEEKOFYEAR(timestamp)
, '-', MAKEDATE(
CASE
WHEN WEEKOFYEAR(timestamp) = 52
THEN YEAR(timestamp)-1
ELSE YEAR(timestamp)
END,
CASE
WHEN WEEKOFYEAR(timestamp) = 52
THEN (WEEKOFYEAR(timestamp) * 7)+3
ELSE (WEEKOFYEAR(timestamp) * 7)+2
END
)
, ', Visits: ' , COUNT(session), '.') AS Phrase
FROM stats
GROUP BY WEEKOFYEAR(timestamp)
ORDER BY timestamp ASC
Также обратите внимание, что это последнее обновление включает еще CASE
в makedate
команда, чтобы обеспечить соответствие между датами текущего и прошлого года.