【问题标题】:MySQL concurrent select from rowsMySQL 从行中并发选择
【发布时间】:2013-12-25 21:05:12
【问题描述】:

我有一个具有start_dateend_date 时间戳的表,这些行包含来自半径记帐​​表的数据。

用户登录后不久,将插入一行带有start_date 时间戳的行,一旦用户注销,end_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 查询。

【问题讨论】:

  • 查看GROUP BYDAY(date) 以提取日期的日部分,COUNT(*) 可以显示出现次数。在不知道表结构的情况下(对我来说)不可能给出完整的查询。
  • 查看 StackOverflow 上的这篇文章:stackoverflow.com/questions/1764881/… 一些想法可能会派上用场。

标签: mysql


【解决方案1】:

试试

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

【讨论】:

    【解决方案2】:

    您可以计算每个数据点上的并发用户数(开始日期/结束日期),然后计算其中的最大值:

    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
    

    【讨论】:

      猜你喜欢
      • 2014-05-18
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 2011-05-17
      • 2012-09-12
      • 1970-01-01
      • 2018-08-27
      • 2016-05-04
      相关资源
      最近更新 更多