【问题标题】:MySQL AVG TIME Duration Calculation and Related Functions?MySQL AVG TIME 持续时间计算和相关函数?
【发布时间】:2016-03-01 18:50:01
【问题描述】:

具有两个日期时间列的网站用户登录数据表。一个是登录时间,一个是注销时间。

表格有以下列

user_id (user id of the
datetime (start login time DATETIME ) 
datetime_end (end logout time DATETIME)

我需要根据这些数据生成报告或计算以下内容

  1. 用户的每日 AVG 登录持续时间(即 2015 年 3 月 1 日为 21 分钟,2016 年 11 月 3 日为 25 分钟等)

第二个报告是

  1. 当前日期(过去 24 小时)基于小时 AVG 登录持续时间(即与上述相同,但仅每小时 AVG)

有没有办法通过 MySQL 查询来实现这一点? (或 SQL 查询)

table is create is

CREATE TABLE IF NOT EXISTS `users_login` (
  `login_id` int(11) unsigned NOT NULL,
  `user_id` int(11) unsigned NOT NULL DEFAULT '0',
  `last_ip` varchar(45) NOT NULL DEFAULT '0.0.0.0',
  `server_ip` varchar(225) DEFAULT '0.0.0.0',
  `country` varchar(2) NOT NULL DEFAULT '00',
  `continent` tinytext,
  `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `datetime_end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

【问题讨论】:

  • 您建议如何处理跨越两个日期的用户会话?例如,用户在 2 月 29 日晚上 11 点登录,然后在 3 月 1 日凌晨 2 点注销。

标签: mysql sql


【解决方案1】:

第一个是这样的

SELECT DATE(datetime),AVG(TIMESTAMPDIFF(MINUTE,datetime,datetime_end)) as DailyAvg
FROM users_login   
GROUP BY DATE(datetime)

每小时:

SELECT DATE(datetime),extract(hour from datetime) as HourCol,
       AVG(TIMESTAMPDIFF(MINUTE,datetime,datetime_end)) as HourlyAvg
FROM users_login   
WHERE DATE(datetime) = date(now())
GROUP BY DATE(datetime),extract(hour from datetime) 

当然,这个查询有一些例外。你没有解释整个逻辑,所以我假设你想按登录时间和登录日期分组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-26
    • 2011-07-30
    • 2012-01-23
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    相关资源
    最近更新 更多