有Client表,ClientID,ClientName,GroupId有Group表,GroupID,GroupName有Schedule表,ScheduleID,GroupID,startTime,endTime有ClientHistory表,ClientID,TimeStamp,ClientStat...
有Client表,ClientID,ClientName,GroupId
有Group表,GroupID,GroupName
有Schedule表,ScheduleID, GroupID,startTime,endTime
有ClientHistory表,ClientID, TimeStamp,ClientStatus(0:N/A,1:offline,2:online)
说明:一个GroupId包含多个ClientId,
Schedule表示一个GroupID包含的所有ClientID播放内容的起始时间startTime,和结束时间endTime,
ClientHistory表是每个Client的历史记录,会不定时像其中插入ClientID对应的状态ClientStatus,及时间戳TimeStamp。
问题:给定一个groupName:sp_GroupName,查询的起始时间,sp_StartTime和结束时间sp_EndTime,查询符合条件的GroupID,GroupName,OnlineRate。
现在:查询出符合sp_GroupName的GroupID,
查询出符合GroupID的所有ClientID
统计每个ClientID的在线时间??
统计GroupID下所有ClientID的在线时间SumDur
计算SumDur/(Timestampdiff(second,sp_StartTime ,sp_EndTime))即可。
问题是,如何统计一个ClientID对应的在sp_StartTime,sp_EndTime时间段里的在线时间?注意,当上一个clientStatus为2,以后的时间段内若没有TimeStamp则是一直在线的,反之一样,这个问题有点复杂,估计要迭代,希望高手指点迷津,最好写成存储过程的形式
展开