【发布时间】:2017-06-27 02:36:13
【问题描述】:
我正在记录社区中游戏玩家的统计数据。对于他们的在线和游戏状态,我在他们“开始”和“结束”时进行注册。为了显示一天中最活跃的日期和时间,我想使用一个 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。列也只是为了示例目的,无论您认为容易使用什么来解释可识别为 start 和 end 的我都可以)
附加信息; PHP 5.5+、PDO、MySQL 5+ ingame 的表格布局为:gameactivity: activityid、userid、gameid、started、ended
DDL:
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;
【问题讨论】:
-
您使用什么 RDBMS?
-
@lolo,添加了标签 MySQL。 Ps,我正在更新帖子以匹配一些额外的研究想法。
-
能否提供DDL和DML?
-
@gvee 将表格布局添加到附加信息中
-
请向我们展示所需的输出。您想知道 13:00 通常是最活跃的时间,还是特别是“2013-12-15 13:00”是最活跃的时间?
标签: mysql