表结构:
人员配备记录
- PersonnelId int
- GroupId 整数
- StaffingStartDateTime 日期时间
- StaffingEndDateTime 日期时间
在给定员工所属的日期和组 ID 的情况下,我如何获得人员配备记录列表,其中当前员工的数量在一天中的任何一分钟都低于阈值,例如 3?
我的大脑的工作方式是,我会在一天中的每一分钟重复调用一个存储过程,但这当然会非常低效:
SELECT COUNT(PersonnelId)
FROM DailyRosters
WHERE GroupId=@GroupId
AND StaffingStartTime <= @TimeParam
AND StaffingEndTime > @TimeParam
AND COUNT(GroupId) < 3
GROUP BY GroupId
HAVING COUNT(PersonnelId) < 3
编辑:如果有助于细化问题,员工可能会全天来来去去。例如,人员的人员配备记录可能从 0800 到 0815,另一个从 1000 到 1045。