【发布时间】:2014-12-08 08:31:25
【问题描述】:
我有两个工作班次:8:00:00 到 16:30:00 和 20:00:00 到 06:00:00。我想创建一个存储过程,当我传递日期时,它将从 SQL 表中检索数据
这是我的表 Table1
ID DateTime EmpID
-------------------------------------
47 2014-12-07 08:00:00 1111
47 2014-12-07 15:25:00 1235
47 2014-12-07 23:55:00 4569
47 2014-12-08 00:00:00 4563
47 2014-12-08 02:00:00 7412
59 2014-12-08 04:00:00 8523
59 2014-12-05 10:30:00 5632
餐桌产品
ID DateTime ProductMade
47 2014-12-07 11:00:00 Milk
47 2014-12-07 08:00:00 Juice
47 2014-12-08 00:00:00 Bread
47 2014-12-08 04:00:00 Cakes
47 2014-12-07 21:00:00 Juice
89 2014-12-01 04:00:00 bread
查询班次 2 18:00 到 06:00
select Count(EmpID) as ID,Count (ProductMade) ProductsTotal, Count(EmpID) * Count (ProductMade) as Total
from Table 1 as T1
inner join Table_Product as Prod on t1.ID = Prod.ID
where T1.DateTime BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()-2), 0) + '18:00' and DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()-1), 0) + '06:00' and DepartmentID=47
所以这将得到所有具有相同ID匹配的记录
那么我必须对第一个班次进行另一个查询。
08:00 至 16:30 之间
select Count(EmpID) as ID,Count (ProductMade) ProductsTotal, Count(EmpID) * Count (ProductMade) as Total
from Table 1 as T1
inner join Table_Product as Prod on t1.ID = Prod.ID
where DATEDIFF(day, CONVERT(VARCHAR(10), GETDATE(),110), CONVERT(VARCHAR(10), T1.DateTime,110))=-2 and DATEPART(HOUR,T1.DateTime) BETWEEN '07' AND '16' and DepartmentID=47
OutPUT FirstShift 08:00 到 16:30
ID ProductMade Total
2 2 4
输出第二班 20:00 至 06:00
ID ProductMade Total
3 3 9
所以第二班要求开始日期为-2,结束日期为-1,这是与白班不同的部分。因为我会通过我想从选择框倒退的天数
【问题讨论】:
-
约翰,你为什么一周后又问同样的问题?你在这里问过stackoverflow.com/questions/27227474/…
-
因为我还没有解决这个问题,我不知道如何推广这个问题,因为没有回应
-
约翰,你的问题有不止一个答案,而且它们都有效。你怎么能不用给出的答案来解决它?
-
John 我看到你在 2 天前更改了另一个问题。也许你应该改变你提出问题的方法。我确信上一个问题有一个有效的答案。将帮助您的问题标记为已回答并在此处提出新问题以“升级”问题,因为目前它看起来像重复
-
jaques 我从来没有说过答案没有用,如果我不能解决它是不是犯罪,我为给您带来的不便表示歉意
标签: sql sql-server