计算每天的小时数,并在1周内获得最大价值

时间:2020-06-04 17:58:22

标签: sql sql-server

有一张桌子

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

希望计算特定日期范围内约会的总时长,但是我想在每日时长上设置最大值。因此,如果某人预定了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

1 个答案:

答案 0 :(得分:1)

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