首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL中每7天重复使用周末模式

在SQL中每7天重复使用周末模式
EN

Stack Overflow用户
提问于 2020-07-16 14:52:23
回答 1查看 149关注 0票数 1

我有一个要求,重复周关闭模式在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‘作为一个硬编码值,用于周停时频率,如下所示

代码语言:javascript
复制
((te.Id / 7) + 1 )

请查找屏幕截图,以获得更多的澄清。

请随意询问是否有任何信息具有误导性或未被清除。

注意:我现在只举了一个雇员的例子,在实际场景中,它可能是第n个雇员,并且根据给定的休假频率,每个员工都应该在给定的日期范围内重复休假.

条件或要记住的点:

RuleTableTemp:目前每个员工都有两个ShiftPattern,但可能会有所不同,也可能是3或4个模式。

RuleTableTemp提交的名称WeekOffFrequencyInDays的值为EmployeeId(4536),但它也可能因每个员工的不同而不同,对于EmployeeId(4536)也是这样。如果"4536“雇员有4个条目,那么所有员工的WeekOffFrequencyInDays值都是相同的。

示例1:

代码语言:javascript
复制
if (RuleTableTemp.WeekOffFrequencyInDays == 7 )    {
       // ShiftPattern's count is 2: 
       // ShiftPattern will switch after every 7 days. 
}

示例2:

代码语言:javascript
复制
if ( RuleTableTemp.WeekOffFrequencyInDays == 14) {
           // if ShiftPattern's count is 3: 
           // ShiftPattern will keep switching between 3 patterns after every 14 days 
    }

示例3:

代码语言:javascript
复制
if ( RuleTableTemp.WeekOffFrequencyInDays == 21) {
           // if ShiftPattern's count is 1 means no switching is required 
    }

,我花了将近一个小时来解释我的要求,但还是有人反对-投票,而不是问什么是未经批准的.所以说要看这个..。*()

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-16 15:09:05

这回答了问题的原稿。

这种逻辑应该与这些变化相匹配:

代码语言:javascript
复制
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。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62937440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档