sql server—在sql中每7天重复一次周末模式

rkue9o1l  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(402)

我需要根据表1中给定的休假频率重复表2中的休假模式。
频率:意味着它可以是7的倍数,比如(7,14,21,28等等)
休息周:对于每个员工,休息周可以是第n行。
请找到sql小提琴演示http://sqlfiddle.com/#!18/7cb68a/2号
在给定的屏幕截图中,如果您注意到“whatisgetting”字段,那么它只工作了两周,之后它将变为空bcz ruletabletemp.shiftid与tempmaintable.shiftid不匹配。
我需要一个Maven的帮助,就我的要求,重复一个星期的假期为给定的日期范围基于给定的ruletabletemp.weekofffrequencyindays。
现在在演示中,我已经使用了'7'作为一个硬编码的值,用于像这样的休假频率

((te.Id / 7) + 1 )

请查看屏幕截图以了解更多说明。
请随时询问是否有任何信息是误导性的或没有清除。
注意:现在我只举了一个实际场景中的员工的例子,可能是第n个员工,每个员工都应该在给定的日期范围内根据给定的休假频率重复休假。。。
要记住的条件或要点:
ruletabletemp:目前我们为每位员工提供两种轮班模式,但可能会有所不同,也可能是3或4种模式。
ruletabletemp文件名weekofffrequencyindays的employeeid(4536)值为“7”,但对于每个员工它也可以不同,例如yes。如果“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 
    }


我花了将近一个小时来解释我的要求,但还是有人投了反对票,而不是问什么是不明确的。。。所以说看看这个……:(

bmp9r5qi

bmp9r5qi1#

这回答了问题的原始版本。
这种逻辑应该与变化相匹配:

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;

注意,我在主表上添加了一个显式序列号。这只是为了确保数字是你真正想要的(自动生成的id可能是个问题)。
逻辑的关键是模运算——当序列号除以14时取余数,然后用它来匹配周。
这是一把小提琴。

相关问题