我在PostgreSQL 9.6中有一个UserSession
表,用于存储用户的登录和注销时间,我想计算并发会话的最大数量-仅当它们重叠至少为时才被认为是并发的30分钟。
示例
userid | starttime | endtime
------------+---------------------------+--------------------------
1 | 01-Oct-19 6:00:00 AM | 01-Oct-19 11:10:00 AM
2 | 01-Oct-19 11:00:00 AM | 01-Oct-19 4:00:00 PM
3 | 01-Oct-19 10:30:00 AM | 01-Oct-19 4:00:00 PM
在这里,会话1和2不是并发的,因为它们仅重叠10分钟,而会话1和3是并发的,因为它们重叠30分钟以上,所以结果是2个并发会话 。
注意::仅当所有n个会话都重叠至少30分钟时,结果才是n。
表定义
CREATE TABLE UserSessions (
SessionID bigserial NOT NULL,UserID bigint NOT NULL,StartTime timestamp NOT NULL,EndTime timestamp NULL,OrganisationID bigint NOT NULL,CONSTRAINT PK_SessionsID PRIMARY KEY(SessionID),CONSTRAINT FK_UserID FOREIGN KEY(UserID) REFERENCES GlobalUsers(UserID),CONSTRAINT FK_OrganisationID FOREIGN KEY(OrganisationID) REFERENCES Organisations(OrganisationID)
);
类似问题
这里有一个类似的问题:Count max number of concurrent user session,但是在同一时间点存在并发方式,对于我来说,我需要检查它们是否至少重叠30分钟