MySQL:查询以获取每周的日志条目数 - 包括空集

时间:2010-07-15 18:41:36

标签: mysql reporting

我的网络应用程序有一个报告,显示每周特定用户的登录次数。但是,我正在努力让查询恰到好处。我遇到的问题是,我似乎无法在几周内完成登录。

目前我的查询如下:

SELECT
    DATE_ADD(logDate, INTERVAL(1-DAYOFWEEK(logDate)) DAY) weekStart,
    DATE_ADD(logDate, INTERVAL(7-DAYOFWEEK(logDate)) DAY) weekEnd,
    COUNT(*) loginCount
FROM log
WHERE
    logDate > $startDate AND
    logDate < $endDate

1 个答案:

答案 0 :(得分:4)

我会为周数创建一个表格:

CREATE TEMPORARY TABLE weeks (weeknum INT PRIMARY KEY);

然后使用整数值0..53填充该表。

然后使用WEEK()函数将其加入到您的日志表中:

SELECT weeks.weeknum, COUNT(*) loginCount
FROM weeks LEFT OUTER JOIN log ON weeks.weeknum = WEEK(log.logDate)
WHERE log.logDate BETWEEN ? AND ?
GROUP BY weeks.weeknum;

如果您需要此查询来支持跨越多年的日期范围,请改用YEARWEEK(),并使用YYYYWW格式的更多行填充临时表,如YEARWEEK()返回的值。