我的网络应用程序有一个报告,显示每周特定用户的登录次数。但是,我正在努力让查询恰到好处。我遇到的问题是,我似乎无法在几周内完成不登录。
目前我的查询如下:
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
答案 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()
返回的值。