我有一个要求,重复周关闭模式在table2基于给定的周停工频率在table1。
Frequency:意味着它可以是一个倍数为7的数字,例如(7,14,21 ,28等)。
周休假:员工每周休假的可能是第N行。
请为演示http://sqlfiddle.com/#!18/7cb68a/2找到SQL小提琴
在给定的屏幕截图中,如果您注意到了“RuleTableTemp.ShiftId”字段,那么它只工作两周--之后它将变为空bcz,TempMainTable.ShiftId.与bcz不匹配。
我需要一位专家帮助我根据给定的RuleTableTemp.WeekOffFrequencyInDays.对给定的日期范围重复一周休假。
现在,在演示中,我使用了'7‘作为一个硬编码值,用于周停时频率,如下所示
((te.Id / 7) + 1 )请查找屏幕截图,以获得更多的澄清。
请随意询问是否有任何信息具有误导性或未被清除。
注意:我现在只举了一个雇员的例子,在实际场景中,它可能是第n个雇员,并且根据给定的休假频率,每个员工都应该在给定的日期范围内重复休假.
条件或要记住的点:
RuleTableTemp:目前每个员工都有两个ShiftPattern,但可能会有所不同,也可能是3或4个模式。
RuleTableTemp提交的名称WeekOffFrequencyInDays的值为EmployeeId(4536),但它也可能因每个员工的不同而不同,对于EmployeeId(4536)也是这样。如果"4536“雇员有4个条目,那么所有员工的WeekOffFrequencyInDays值都是相同的。
示例1:
if (RuleTableTemp.WeekOffFrequencyInDays == 7 ) {
// ShiftPattern's count is 2:
// ShiftPattern will switch after every 7 days.
}示例2:
if ( RuleTableTemp.WeekOffFrequencyInDays == 14) {
// if ShiftPattern's count is 3:
// ShiftPattern will keep switching between 3 patterns after every 14 days
}示例3:
if ( RuleTableTemp.WeekOffFrequencyInDays == 21) {
// if ShiftPattern's count is 1 means no switching is required
}

,我花了将近一个小时来解释我的要求,但还是有人反对-投票,而不是问什么是未经批准的.所以说要看这个..。*()
发布于 2020-07-16 15:09:05
这回答了问题的原稿。
这种逻辑应该与这些变化相匹配:
SELECT mt.* ,
(SELECT rtt.ShiftPattern
FROM RuleTableTemp rtt
WHERE rtt.EmployeeID = mt.EmployeeId AND
rtt.id = (((mt.seqnum - 1) % 14) / 7) + 1
) as Sh
FROM (SELECT mt.*,
ROW_NUMBER() OVER (PARTITION BY mt.EmployeeId ORDER BY id) as seqnum
FROM TempMainTable mt
) mt;注意,我在主表上添加了一个显式序列号。这只是为了确保数字正在执行您真正想要的(自动生成的ids可能是一个问题)。
逻辑的关键是模运算--当序列数除以14时,取余数,然后用它来匹配一周。
这里是db<>fiddle。
https://stackoverflow.com/questions/62937440
复制相似问题