【发布时间】:2016-09-06 04:36:56
【问题描述】:
美好的一天,我试图总结小时和分钟。但现在我只能总结the hour part
这是我的查询。是的,当我将问题放入 stackoverflow 时,我得到了这个查询
select
a.Nip, b.FullName, c.attendancedate, c.inTime, c.OutTime,
DATEPART(wk, c.attendanceDate) week,
case
when DATEADD(HOUR, -8, OutTime) <= InTime then '00:00'
else CONVERT(VARCHAR(5),DATEADD(HOUR, -8, OutTime - InTime), 108)
end AS total
from
DinasHoDetail a
left join
Employee b on a.Nip = b.Nip
left join
DinasHoHeader d on a.KodeDinasHeader = d.KodeDinasHeader
left join
attendance c on a.Nip = c.Nip and attendancedate between d.startdate and d.enddate
where a.KodeDinasHeader = 'DN0000001' and b.nip = '1602744'
从我上面的查询中我得到了这个结果
所以,从结果中可以看出。有一个名为 week 的 col。所以我试图按周总结每个total 组。这是查询
select Nip,sum(ro) achieve,FullName
from(
select a.Nip,b.FullName,DATEPART( wk, c.attendanceDate) week,
sum(case when DATEADD(HOUR, -8, OutTime) <=InTime then 0 else DATEDIFF(HOUR, InTime, OutTime) - 8 end)/8 AS RO
from DinasHoDetail a
left join Employee b on a.Nip = b.Nip
left join DinasHoHeader d on a.KodeDinasHeader = d.KodeDinasHeader
left join attendance c on a.Nip =c.Nip and attendancedate between d.startdate and d.enddate
where a.KodeDinasHeader = 'DN0000001' and b.nip = '1602744'
group by a.Nip,b.FullName,DATEPART( wk, c.attendanceDate)) q group by Nip ,FullName
这是结果
问题部分。
从第一个结果可以看出。第 37 周是 08:11 (Eight hours eleven minute),周 38 是 10:00 (Ten hours)。
当总和超过08 hours (Group by week)时,每个人都会获得一项成就。所以我应该有 2 对吗?
我相信我的问题是因为我不这样做the datadd method for minute
通过上面的查询,我只能总结小时数而不是分钟数。所以我的问题是我怎么能DATEADD 和HH:MM 格式?
【问题讨论】:
-
将逻辑改为计算分钟数而不是小时数,将分钟数相加,然后除以 60。
标签: sql sql-server sql-server-2008