我有一张桌子。
此表具有用户的使用期限。
示例如下
|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”。
有没有简单的方法来设置它?你推荐什么?
答案 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。