需要计算上个月未工作的营业时间长短

问题描述 投票:0回答:1

我需要能够在工作时间内提取上个月员工休假的时间

EX:如果员工从周五早上 8 点到下周一下午 5 点下班,则该实例的“DurationOff”将为 18 小时(基于周一至周五上午 8 点至下午 5 点的工作时间)。

我拥有的 2 位数据在 SqlFiddle 中。如果需要,可以提供脚本。

#1。 TechTimeOff:技术在上个月关闭的每个实例。 “DurationOff”列是我想要实现的(以分钟或小数为单位)。

技术编号 技术名称 TimeOff_From TimeOff_To TimeOff_ID 来自(每月一分钟) 至(每月一分钟) *持续时间关闭
1 海狸 2023-02-01 08:00 2023-02-01 16:30 23 480 990 8.50 小时(或 510 分钟)
2 沃利 2023-02-01 08:00 2023-02-03 17:00 24 480 3060 27.00 小时(或 1620 分钟)
3 病房 2023-02-01 08:00 2023-02-06 17:00 25 480 6120 36.00 小时(或 2160 分钟)

#2。日历:上个月的每一分钟。如果该分钟不在营业时间参数内,则 BusinessTime =“否”。
(只显示适用于这篇文章的行)

日期和时间 日名 每月一分钟 每日一小时 营业时间
2023-02-01 07:59:00 星期三 479 7 没有
2023-02-01 08:00:00 星期三 480 8
2023-02-01 16:30:00 星期三 990 16
2023-02-03 17:00:00 星期五 3060 17
2023-02-04 08:00:00 星期六 1920 8 没有
2023-02-06 17:00:00 星期一 6120 17

我可能会绕着屁股走到我的肘部,但这是我实现正确“DurationOff”值的总体计划:

一个。让 TechTimeOff 表显示技术关闭的每一分钟的行。然后添加“MinuteOfTheMonth”列,显示技术关闭的每一行的值。
---> 还没有想出如何按分钟将休息时间分成几行,并认为这可能是我遗漏的部分?

乙。然后,我将使用 Calendar.MinuteOfTheMonth = TechTimeOff.MinuteOfTheMonth 加入表(在 步骤 A)

C。然后,我会计算(或以其他方式计算)TimeOff_From 和 TimeOff_To 之间的分钟数,不包括任何分钟 Calendar.BusinessTime 喜欢'不'

我什至不确定上述过程是否有效。 有人可以帮忙吗?

------------------------------------------------ ----------------------------------

我假设休息时间需要按分钟划分,这样我就可以加入 Calendar.MinuteOfTheMonth = TechTimeOff.MinuteOfTheMonth 上的表格(在步骤 A 中添加的 col)。

这将允许我在尝试获取 DurationOff 时过滤掉 BusinessTime LIKE 'No' 的分钟数。

sql sql-server calendar duration
1个回答
0
投票

由于您的日历表包含每一分钟,您可以加入它并执行

count(*)
,这是您需要的持续时间(以分钟为单位)

select  t.TechID, t.TechName, Duration = count(*)
from    TechTimeOff t
        inner join Calendar c   on  c.Day_Time >= t.TimeOff_From
                                and c.Day_Time <  t.TimeOff_To
where   c.BusinessTime  = 'Yes'
group by t.TechID, t.TechName;
© www.soinside.com 2019 - 2024. All rights reserved.