【发布时间】:2014-08-08 17:27:40
【问题描述】:
我被一些 MS SQL 工作弄得不知所措,我虚心地请求帮助。我正在学习基础知识,但被分配的任务远远超出我的技能水平。我被要求提供一个查询,该查询将显示使用我们的时钟数据库为每个工作代码工作了多少小时。以下是表格示例。
employeeid Jobcode TimeIn TimeOut
18405 4 2014-08-08 06:55:00 2014-08-08 09:14:00
19000 4 2014-08-08 09:27:00 2014-08-08 11:04:00
20205 4 2014-08-08 11:33:00 NULL
18406 13 2014-08-08 06:57:00 2014-08-08 09:01:00
18405 13 2014-08-08 09:16:00 2014-08-08 11:03:00
18406 13 2014-08-08 11:33:00 NULL
18407 19 2014-08-08 08:25:00 2014-08-08 12:03:00
18411 19 2014-08-08 07:59:00 2014-08-08 11:01:00
我想要显示的是运行查询时每个作业代码的总小时数。
Job Code Minutes
1 500
2 700
3 200
这是我使用的查询:
select eh.jobcode, datediff(mi, eh.TimeIn, isnull(eh.TimeOut, DateAdd(HH,2,Getdate()))) as Minutes
FROM [TimeClockPlus].[dbo].EmployeeHours as eh inner join
[TimeClockPlus]. [dbo].employeelist as el ON eh.employeeid = el.employeeid
WHERE el.department = 'WAREHOUSE' and eh.timein
>= dateadd(dd, datediff(dd, 0, getdate()), 0)
and eh.timein < dateadd(dd, datediff(dd, 0, getdate()), +1)
Group by datediff(mi, eh.TimeIn, isnull(eh.TimeOut, DateAdd(HH,2,Getdate()))) , eh.Jobcode
但是我得到了每个工作代码的多行,我没有正确理解 GROUP BY 吗?
最后添加了“order by eh.jobcode”的结果示例:
jobcode Minutes
1 69
1 127
1 112
1 24
1 105
2 134
2 53
2 101
4 80
4 9
4 105
4 94
4 129
4 119
5 15
5 103
5 23
5 28
5 33
5 91
【问题讨论】:
-
以下两张海报在技术上都有正确的答案。我只需要对 datediff 进行求和并将其从 group by 中删除。
SELECT eh.jobcode, SUM( DATEDIFF(mi, eh.TimeIn, ISNULL(eh.TimeOut, DATEADD(HH,2,GETDATE()))) )AS Minutes FROM [TimeClockPlus].[dbo].EmployeeHours AS eh inner join [TimeClockPlus].[dbo].employeelist AS el ON eh.employeeid = el.employeeid WHERE el.department = 'WAREHOUSE' AND eh.timein >= DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0) and eh.timein < DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), +1) GROUP BY eh.Jobcode
标签: sql-server sql-server-2008 group-by datediff