MySQL并发从行中选择
我有一个具有MySQL并发从行中选择,mysql,Mysql,我有一个具有开始日期和结束日期时间戳的表,这些行包含radius记帐表中的数据 用户登录后不久,将插入带有start\u date时间戳的行,用户注销后,end\u date将填充更新 以下是几行: ID | start_date | end_date 22 2013-11-19 12:00:22 2013-11-20 14:20:22 (*) 23 2013-11-19
开始日期
和结束日期
时间戳的表,这些行包含radius记帐表中的数据
用户登录后不久,将插入带有start\u date
时间戳的行,用户注销后,end\u date
将填充更新
以下是几行:
ID | start_date | end_date
22 2013-11-19 12:00:22 2013-11-20 14:20:22 (*)
23 2013-11-19 12:02:22 2013-11-20 15:20:22 (*)
23 2013-11-19 17:02:22 2013-11-20 20:20:22
24 2013-11-20 12:06:22 2013-11-20 15:20:22 *
25 2013-11-20 12:40:22 2013-11-20 15:23:22 *
26 2013-11-20 12:50:22 2013-11-20 17:23:22 *
27 2013-11-20 16:56:22 2013-11-20 17:29:22
28 2013-11-20 17:58:22 2013-11-20 20:24:22
因此,在本例中,2013-11-19的最大并发用户数为2(标有(*)(开始和结束重叠的时间),2013-11-20的最大并发用户数为3(标有*)
我正在尝试编写一个SQL查询,以获取一天中最多并发用户的数量(基于开始日期和结束日期),因此一个简短的结果是,在2013-08-12,最多同时在线的用户是xx个
我可以在PHP中通过逐行分析来实现这一点,但我希望将其作为SQL查询。您可以计算每个数据点上的并发用户数(开始日期/结束日期),然后计算最大值:
select max(cnt)
from (
select q.t, count(*) as 'cnt'
from (
select start_date as 't'
from log
where start_date between YOUR_START_DATE and YOUR_END_DATE
union
select end_date
from log
where end_date between YOUR_START_DATE and YOUR_END_DATE
) as q
join log l on q.t between l.start_date and l.end_date
group by q.t
) a
试一试
查看
GROUP BY
和DAY(date)
提取日期的日期部分,使用COUNT(*)
可以显示发生的次数。(对我来说)在不知道表结构的情况下,不可能给出完整的查询。
select d, count(*) as user_count
from
(
select start_date as d from your_table
union all
select end_date as d from your_table
) x
group by d
order by user_count desc