这就是我所拥有的:
SELECT Count(*) AS cnt
FROM tblOccurrence AS x
WHERE (((x.OccurrenceDate) Between DateAdd('m',-6,Date()) And Date())
AND ((Exists ( SELECT *
FROM tblOccurrence AS y
WHERE y.TechID = x.TechID AND DATEADD ('d', -1, x.[OccurrenceDate]) = y.[OccurrenceDate]))=False)
AND ((x.TechID)= " & Me.tbxTechID.Text & "))
GROUP BY x.TechID;
这用于计算员工缺勤的“发生率”,如果员工在1天内无故失业1次。如果他们连续5天没有理解,那么它仍然是一次。
这是完美的工作,直到有人指出,如果一名员工有一个M-F轮班,并在周五和周一打电话,那只有一次。为了让事情变得更加艰难,我们的员工变得非常大(MF,Tue-Sat,Sun-Mon,M-Tue& Fri-Sat等)......所以我建立了一个可以容纳所有不同班次的桌子(其中大约8个)有9列:
ID - ShiftName - Sunday - Monday - Tuesday - Wednesday - Thursday - Friday - Saturday
ShiftName是一个带有简短描述的文本字段(周一至周五,周二至周五,周日至周四等),然后是一周中的是/否字段。然后复选标记是预定的一天。
所以我希望每个人都能输入两件事,
答案 0 :(得分:0)
通过在表tblOccurrence中再添加一列,这将更容易实现。称这个新专栏为:occuranceCounter。使用触发器填充此列。每当您在tblOccurence中插入一个新行时,此触发器将填充occuranceCounter列。
触发逻辑:检查员工的班次,检查上次缺席日期,当前缺席日期,如果根据员工班次连续几天,则将出现事件保持与最后一次缺席事件相同,然后将出现事件增加一次。
如果员工随时间推移数据变更,那么添加员工班次历史表将会很有帮助。