在SQL中,如何计算最大并发用户数

时间:2014-11-14 12:55:21

标签: mysql sql

我有一张桌子。

此表具有用户的使用期限。

示例如下

|user_id|start_at  |end_at    |
|1      |2014/11/02|2014/11/05|
|2      |2014/11/03|2014/11/07|
|3      |2014/11/08|2014/11/09|

我希望获得最多的并发用户数

以上情况,

在2014/11/03~2014 / 05之间,有2位用户使用过。

我想得到这个“2”。

有没有简单的方法来设置它?你推荐什么?

3 个答案:

答案 0 :(得分:2)

最大值将在start_at次之一发生。所以,你可以通过自我加入来做到这一点:

select u.start_at, count(*) as numconcurrent
from usage u join
     usage u2
     on u.start_at between u2.start_at and u2.end_at
group by u.start_at

如果您想要最大数量,请添加:

order by count(*) desc
limit 1;

答案 1 :(得分:1)

听起来你可能误解了这个问题。你真的是说“最大”吗?或者只是两个日期之间的用户数量?如果是这样,那么

Select count(*) from table 
where start_at < @end
   and end_at > @start

答案 2 :(得分:0)

sum(case when start_at >= @startdate and end_at <= @enddate 
          then 1 
          else 0 
    end) as total

这将遵循限定集声明语句或嵌入在存储过程中。你的选择。

每当它看到符合这些凭据的行并总计总和时,它将递增1。