sql - 计算每天的小时数,最大值输出超过 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
解决方案
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
推荐阅读
- db2 - DB2 Z/OS - 重命名表空间
- rabbitmq - 如何使用 Apache Camel OpenTracing 组件更改跨度的操作名称?
- java - JPA2 CriteriaQuery 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中
- linkedin - LinkedIn Share API(缺少 r_member_social 权限)
- wordpress - 如何删除此参数 https://website.com/metaboxesq/index.php?keyword=KANGOL-Bermuda-1422
- wordpress - .htaccess 子页面和表单的多个重定向
- sql - SQL - 将列转换为 XML,然后从所述列中查询值
- android - 无法为 Retrofit 中的类创建 @Body 转换器
- python - Pandas - 具有多个布尔列的堆叠条形图
- json - 如何从 Json 中读取标头以及双引号并将其传递给 API?