- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在记录社区中游戏玩家的统计数据。对于他们的在线和游戏内状态,我会在他们“开始”和“结束”时进行注册。为了显示一天中最活跃的日期和时间,我想使用一个 SQL 语句来测量基于“开始”和“结束”日期时间值的最活跃时刻。
看SQL - select most 'active' time from db我可以看到相似之处,但我还需要包括开始时间和结束时间之间的时刻。
也许最简单的方法是编写一个执行计算的 cron,但我希望这个问题可以教会我如何在 SQL 中解决这个问题。
我一直在寻找允许创建日期时间段并使用它来减去单个小时和天的 SQL 语句。但无济于事。
---更新
随着我对这个问题的思考越来越多,我想知道基于一天中的每个小时(对于最活跃的小时)运行 24 个查询并为最活跃的一天运行多个查询是否明智。但这似乎是在浪费性能。但是这个解决方案可能使查询成为可能:
SELECT COUNT(`userID`), DATE_FORMAT("%H",started) AS starthour,
DATE_FORMAT("%H",ended) AS endhour
FROM gameactivity
WHERE starthour >= $hour
AND endhour <= $hour GROUP BY `userID`
($hour 是出于示例目的而添加的,当然我使用的是 PDO。列也只是出于示例目的,任何您认为易于使用的解释都可以识别为开始和结束对我来说没问题)
附加信息; PHP 5.5+、PDO、MySQL 5+ingame 的表布局为:gameactivity:activityid、userid、gameid、started、ended
数据链接:
CREATE TABLE IF NOT EXISTS `steamonlineactivity` (
`activityID` int(13) NOT NULL AUTO_INCREMENT,
`userID` varchar(255) NOT NULL,
`online` datetime DEFAULT NULL,
`offline` datetime DEFAULT NULL,
PRIMARY KEY (`activityID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
最佳答案
如果我正确理解您的要求,如果此图表示用户事件:
Day
12/1 12/2 12/3 12/4 ...
Hour 0 xx x x xx
1 x xx xx
2 xxx x x xx
3 x x
4 x x
5 x x
6 x
...
您想知道 02:00 是一天中平均事件最高的时间(一行有 7 x
),而 12/4 是最活跃的一天(一列有 10 x
)。请注意,这并不意味着 12 月 4 日的 02:00 是有史以来最活跃的小时,如您在示例中所见。如果这不是您想要的,请使用输入和期望结果的具体示例进行说明。
我们做了几个假设:
2013-12-02 23:35
,离线2013-12-03 00:13
。我们需要定义“事件”的含义。我选择了在每种情况下更容易计算的标准。如果需要,两者都可以变得更准确,但代价是查询更复杂。
对于一天中最活跃的时间,我们将使用一个包含 24 小时的小辅助表。它也可以使用其他答案中描述的技术即时生成和加入。
CREATE TABLE hour ( hour tinyint not null, primary key(hour) );
INSERT hour (hour)
VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (10)
, (11), (12), (13), (14), (15), (16), (17), (18), (19), (20)
, (21), (22), (23);
然后下面的查询给出所需的结果:
SELECT hour, count(*) AS activity
FROM steamonlineactivity, hour
WHERE ( hour BETWEEN hour(online) AND hour(offline)
OR hour(online) BETWEEN hour(offline) AND hour
OR hour(offline) BETWEEN hour AND hour(online) )
GROUP BY hour
ORDER BY activity DESC;
SELECT date, count(DISTINCT userID) AS activity
FROM (
SELECT userID, date(online) AS date
FROM steamonlineactivity
UNION
SELECT userID, date(offline) AS date
FROM steamonlineactivity
) AS x
GROUP BY date
ORDER BY activity DESC;
关于mysql - 基于开始和结束时间的一天中最活跃的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20515656/
尝试根据 :server-name 在请求中返回的内容加载特定模板: (ns rosay.views.common (:use noir.core) (:require [noir.reque
我想检查谁是活跃用户(过去 7 天都登录过)以及谁是非活跃用户(过去 7 天没有登录过)。我有 2 个表用户和机构。用户表结构如下: id | first_name | email | agency
我的 CSS 有问题。我试图将事件类设置为在垂直菜单上以粉红色突出显示,但事实并非如此。我如何在没有用户悬停在它上面的情况下保持它点亮。这是我的 HTML 和 CSS。 HTML 代码:
我有一个 Tile,当它处于 Activity 状态时,会运行一个计时器,在这五分钟内执行一项任务,然后在一定时间后返回到非 Activity 状态。 但是,我遇到的问题是服务被终止了。当所述计时器启
我已经知道如何在点击类(class)时激活它,但是当我将鼠标悬停在特定区域时如何激活类(class)? 这里是点击时获取事件类的代码: >Contact 是不是这样的: $('').hover(
我在使用 screen 时遇到问题。我知道 screen session 在主进程工作时工作,但我怎样才能让这个 session 保持事件状态?我需要这个,因为 session 关闭时有一些子进程被杀
我有一个 session 超时为 15 分钟的站点。在某些页面上,用户有时会花费超过 15 分钟的时间来填写回复。在这种情况下,使 session 保持事件状态的最佳解决方案是什么? 我已经在这些页面
我正在网页(在弹出窗口中)检查用户状态 - 他是活跃的还是空闲的。如果他空闲超过 30 分钟,窗口将自动关闭并重置数据库中的一些标志。 我设置了包含时间的 cookie(他打开弹出窗口的时间),并在每
由于某种原因,Jenkins 一直停止工作,我必须重新启动 jenkins 服务才能使其再次工作。每次发生这种情况时,服务都是“事件(退出)”,但日志中没有任何内容。我使用 Ubuntu 16.04。
我有一个幻灯片,需要单击它才能转到下一个图像/视频。但是,我想自动执行此操作,因此不需要任何用户事件。 页面如下所示: Slide 1 Slide 2 Slide
我正在使用 C# 应用程序来验证和检查位于 Window 2008 64 位服务器上的 Active Directory 用户。 使用以下代码提供用户名和密码时,我能够成功验证用户:我的域名值为 ro
这个问题在这里已经有了答案: Is there a CSS parent selector? (33 个答案) 关闭 9 年前。 有没有办法根据类中子元素的类来选择父元素?与我相关的示例是关于 ht
我正在尝试连接到 API,对用户进行身份验证,然后查看用户详细信息。这是通过首先访问登录端点来完成的 http://api.example.com/login// 登录然后查看用户详细信息: http
我正在尝试连接到 API,对用户进行身份验证,然后查看用户详细信息。这是通过首先访问登录端点来完成的 http://api.example.com/login// 登录然后查看用户详细信息: http
我是一名优秀的程序员,十分优秀!