Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL并发从行中选择_Mysql - Fatal编程技术网

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