【问题标题】:MySQL: Query to get number of log entries per week -- including empty setsMySQL:查询以获取每周的日志条目数——包括空集
【发布时间】:2010-07-15 18:41:36
【问题描述】:

我的 Web 应用程序有一个报告,显示特定用户每周的登录次数。但是,我正在努力使查询恰到好处。我遇到的问题是,我似乎无法获得用户没有登录的周数。

目前我的查询如下所示:

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

【问题讨论】:

    标签: mysql reporting


    【解决方案1】:

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

    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() 返回的值。

    【讨论】:

    • 我从未对此做出回应,因为我从未有机会对此进行测试——其他任务和项目优先。但听起来不错。 :)
    猜你喜欢
    • 2023-03-15
    • 2013-04-02
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    相关资源
    最近更新 更多