找出某个时刻并发用户的数量(例如。在规定日期内每天12:00)。我的表是id,login,logout as datetime
所以我可以得到以下信息:在2018-04-01和2018-04-06之间的中午,有4个并发用户在2018-04-01 12:00,5个并发用户在2018-04-02 12:00等等。
--------------------------------------
id login logout
--------------------------------------
1 2018-04-01 13:00 2018-04-02 13:00
2 2018-04-02 8:00 2018-04-04 16:00
查询2018-04-01和2018-04-03两个日期之间的12:00
-------------------------------------
date Number of conc.users
--------------------------------------
2018-04-01 0
2018-04-02 2
2018-04-03 1
这就是我得到的
set @DATE = '2018-04-01 12:00:00';
SELECT @DATE := DATE_ADD(@DATE, INTERVAL 1 DAY) AS DATE, COUNT(*) FROM Tasks WHERE start <= STR_TO_DATE(@DATE, '%Y-%m-%d %H:%i:%s') and end >= STR_TO_DATE(@DATE, '%Y-%m-%d %H:%i:%s')
为了动态地更改日期,我尝试进行重复查询,因为它是这样工作的
SELECT '2018-04-01 12:00:00' AS DATE, COUNT(*) FROM Tasks WHERE start <= STR_TO_DATE(@DATE, '%Y-%m-%d %H:%i:%s') and end >= STR_TO_DATE(@DATE, '%Y-%m-%d %H:%i:%s')
只是一次约会
1条答案
按热度按时间cnh2zyt31#
像这样的事情应该可以做到:
SELECT * FROM users WHERE :date BETWEEN login AND logout
编辑:由于op提供了一些样本数据和他所期望的结果,他打算做的事情就更清楚了。我不确定纯sql解决方案是否是实现这一点的最优雅的方法,因为您必须提供一个要检查的所有可能日期的列表,如下面所述:获取两个日期之间的日期列表
但这里有一个方法:
因此,基本上这会将您的所有登录会话与所提供日期范围内12:00的所有可能日期连接起来。
我还在这里创建了一个sqlfiddle:http://sqlfiddle.com/#!2012年9月4日A375B