首页 > 解决方案 > 计算每天的小时数,最大值输出超过 1 周

问题描述

有一张桌子

表:安排
约会
日期
员工
持续时间

希望计算特定日期范围内约会的总持续时间,但是我想设置每日持续时间的最大值。因此,如果有人预订了 6 个一小时的预约,然后又预约了 12 小时,使这一天总共 18 小时,我想将每天的最大持续时间设置为 10 小时以进行每周计算,我该如何正确去做。?使用 Sql Servman Management Studio

我的代码如下,只是不确定如何计算每个员工的总数:

select e.emp_id,Case when isnull(SUM(S.DURATION),0) > 10 then 10 else isnull(SUM(S.DURATION),0) end AS hours
from employee e left join Schedule s on s.emp_id = e.EMP_ID AND s.type <> 'z'
AND S.[DATE] >= CONVERT(VARCHAR(10),GETDATE()+1,121)
AND S.[DATE] <= CONVERT(VARCHAR(10),GETDATE()+5,121)
where e.INACTIVE = 'n'
AND E.U_ADVERTIS <> ''
group by s.[date],e.EMP_ID
order by e.EMP_ID

标签: sqlsql-server

解决方案


DATEPART WK怎么样

也可以使用 DATEPART ISOWK

https://docs.microsoft.com/en-us/sql/t-sql/functions/datepart-transact-sql?view=sql-server-ver15

select 
    e.emp_id,
    DATEPART(WK,[S.Date]) as WeekNum,
    Case 
        when isnull(SUM(S.DURATION),0) > 10 then 10 
        else isnull(SUM(S.DURATION),0) 
    end AS hours
from employee e 
    left join Schedule s 
        on s.emp_id = e.EMP_ID 
            AND s.type <> 'z'
            AND S.[Date] > DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) -- Since the firs of the year, you can change this range up how you want/need
            --AND S.[DATE] >= CONVERT(VARCHAR(10),GETDATE()+1,121)
            --AND S.[DATE] <= CONVERT(VARCHAR(10),GETDATE()+5,121)
where e.INACTIVE = 'n'
    AND E.U_ADVERTIS <> ''
group by DATEPART(wk,[S.Date]),e.EMP_ID
order by e.EMP_ID,DATEPART(wk,s.date) desc

推荐阅读