我想密切关注我的应用程序的并发用户数。因此,我记录了time_start和time_stop。如果我现在想要查询数据库中的最大登录用户数并返回开始日期,我该怎么做。
表格如下:
id | time_start | time_stop
----+---------------------+---------------------
1 | 2010-03-07 05:40:59 | 2010-03-07 05:41:33
2 | 2010-03-07 06:50:51 | 2010-03-07 10:50:51
3 | 2010-02-21 05:20:00 | 2010-03-07 12:23:44
4 | 2010-02-19 08:21:12 | 2010-03-07 12:37:28
5 | 2010-02-13 05:52:13 |
如果time_stop为空,则用户仍然登录。在这种情况下,我希望看到2010-03-07返回,因为当时所有用户(5)都已登录。但是,如果我使用'where time_start BETWEEN'2010-02-17'EN'2010-02-23'运行查询,我希望看到2010-02-21最多为2。
这可能直接在SQL中使用(使用postgres)还是需要在PHP中解析结果?
谢谢, lleto
答案 0 :(得分:3)
怎么样
SELECT COUNT(*)
FROM TABLE
WHERE time_start <= enddate
AND (time_stop > enddate OR time_stop IS NULL)
结束日期为'2010-02-23'
OR
SELECT COUNT(*)
FROM TABLE
WHERE time_start BETWEEN startdate AND enddate
AND (time_stop > enddate OR time_stop IS NULL)
起始日期为'2010-02-17'
,结束日期为'2010-02-23'
尝试在您希望的任何一个日期使用MAX,例如
SELECT MAX(time_start),MAX(time_stop), COUNT(*)
FROM @Table
WHERE time_start between '17 Feb 2010' AND '23 Feb 2010'
AND (time_stop > '23 Feb 2010' OR time_stop IS NULL)