有一清洗池,在某一天的清洗工作记录如下:产品 开始清洗时间 完成清洗时间
prod1 2006-03-06 08:00:00.000 2006-03-06 13:00:00.000
prod2 2006-03-06 09:00:00.000 2006-03-06 10:00:00.000
prod3 2006-03-06 12:00:00.000 2006-03-06 13:00:00.000
prod4 2006-03-06 09:10:00.000 2006-03-06 09:30:00.000现需要计算,它在清洗物品A、物品B、物品C、物品D时各投入多少时间?
需要说明的是,如果同一时间段做N件物品,那么每个物品的投入时间即为该时段的1/N 。
我试了下,但写不出来,恳请大家帮忙。非常感谢!
解决方案 »
- 问下一下的sql~
- 数据库并发问题,CSDN无大神?
- 请教这个存储过程怎样写??
- 大数据读取时,页面超卡,什么原因?
- 求助大侠帮我看看下面的存储过程为何执行两次,也就是说Insert两次
- 急,高手请进
- 大哥们帮帮忙,一个查询的问题
- insert into 插入日期型数据????
- 修改SQL Server 2000的sa密码时密码中包含{},密码修改成功后用sa不可再登录
- 求助,sql Server 2000升级到sql Server 2008,无法升级,规则错误,请帮忙解决
- 删除视图记录
- 用一个用户在sqlserver建立一个表,想控制其他用户访问的权限:具体是不让别人看见表中的一列(只显示成为*),其他列可以看到。
Try:
select T.产品,count(*)/T2.num
from 表 T1,(select min(开始清洗时间) as Min_date, max(完成清洗时间) as Max_date,datediff(hh,min(开始清洗时间),max(完成清洗时间))as num from 表) T2
where T1.开始清洗时间>=T1.Min_date or T1.完成清洗时间<=T2.Max_date
group by T.产品
(
产品 varchar(10),
开始清洗时间 datetime,
完成清洗时间 datetime
)insert A select 'prod1','2006-03-06 08:00:00.000','2006-03-06 13:00:00.000'
insert A select 'prod2','2006-03-06 09:00:00.000','2006-03-06 10:00:00.000'
insert A select 'prod3','2006-03-06 12:00:00.000','2006-03-06 13:00:00.000'
insert A select 'prod4','2006-03-06 09:10:00.000','2006-03-06 09:30:00.000'select 产品,Con_num*0.1/(select datediff(hh,min(开始清洗时间),max(完成清洗时间))as num from A)
from
(select T1.产品,count(*) as Con_num
from A T1,
(select min(开始清洗时间) as Min_date, max(完成清洗时间) as Max_date,datediff(hh,min(开始清洗时间),max(完成清洗时间))as num from A) T2
where T1.开始清洗时间>=T2.Min_date or T1.完成清洗时间<=T2.Max_date
group by T1.产品) A1
prod2 .020000000000
prod3 .020000000000
prod4 .020000000000
prod1 2006-03-06 08:00:00.000 2006-03-06 13:00:00.000
prod1 2006-03-06 14:00:00.000 2006-03-06 15:00:00.000
prod2 2006-03-06 09:00:00.000 2006-03-06 10:00:00.000
prod3 2006-03-06 12:00:00.000 2006-03-06 13:00:00.000
prod4 2006-03-06 09:10:00.000 2006-03-06 09:30:00.000
prod3 2006-03-07 12:00:00.000 2006-03-07 13:00:00.000
prod4 2006-03-07 09:10:00.000 2006-03-07 09:30:00.000你可不可以把你要的结果 写给我看一下啊!?
prod2 2006-03-06 10:00:00.000 2006-03-06 14:00:00.000
那prod1 ,prod2 的投入时间又该怎么算?
难道是这样? prod1=(13-8)-(13-10)/2=3
prod2=(14-10)-(13-10)/2=2.5 ?
prod1 2006-03-06 08:00:00.000 2006-03-06 13:00:00.000
prod2 2006-03-06 10:00:00.000 2006-03-06 14:00:00.000那prod1 ,prod2 的投入时间又该怎么算?
难道是这样? prod1=(13-8)-(13-10)/2=3
prod2=(14-10)-(13-10)/2=2.5 _____________________________________________________________
沒錯,我就是想得到這樣的結果,哪位能幫我一下?
prod1 2006-03-06 08:00:00.000 2006-03-06 13:00:00.000
prod2 2006-03-06 10:00:00.000 2006-03-06 14:00:00.000我想得到的結果是:
prod1=(13-8)-(13-10)/2=3
prod2=(14-10)-(13-10)/2=2.5 請問可以通過存儲過程實現嗎?
問題解決了,我是用的存儲過程;這個問題關鍵在算法,只要想相通了用sp實現起來倒不難.以下是我的解決步驟:1、清洗池工作記錄:説明:Mid為各清洗池的編號;st為起始工作時間;et為完成工作時間。Id MId st et
14836 7261 2006-03-10 08:00:00.0002006-03-10 13:00:00.000
14837 7261 2006-03-10 09:00:00.0002006-03-10 11:00:00.000
14838 7261 2006-03-10 09:20:00.0002006-03-10 10:30:00.000
14841 7261 2006-03-10 09:10:00.0002006-03-10 09:40:00.000
14842 7225 2006-03-10 09:10:00.0002006-03-10 09:56:00.000
14843 7246 2006-03-10 10:10:00.0002006-03-10 12:40:00.000
14844 7247 2006-03-10 10:10:00.0002006-03-10 12:40:00.000
14845 7225 2006-03-10 10:10:00.0002006-03-10 10:50:00.0002、各清洗池的工作時間段説明:Mid為各清洗池的編號;dt各清洗池的各工作時間點。idMiddt
172252006-03-10 09:10:00.000
272252006-03-10 09:56:00.000
372252006-03-10 10:10:00.000
472252006-03-10 10:50:00.000
572462006-03-10 10:10:00.000
672462006-03-10 12:40:00.000
772472006-03-10 10:10:00.000
872472006-03-10 12:40:00.000
972612006-03-10 08:00:00.000
1072612006-03-10 09:00:00.000
1172612006-03-10 09:10:00.000
1272612006-03-10 09:20:00.000
1372612006-03-10 09:40:00.000
1472612006-03-10 10:30:00.000
1572612006-03-10 11:00:00.000
1672612006-03-10 13:00:00.0003、各清洗池在其各工作階段的任務數説明:Mid為各清洗池的編號;st為工作階段起點;et為工作階段終點;
times為該工作段的時長;tasks為該該清洗池在階段的任務數。Id Midstettimestasks
1 72252006-03-10 09:10:00.0002006-03-10 09:56:00.000461
2 72252006-03-10 09:56:00.0002006-03-10 10:10:00.000140
3 72252006-03-10 10:10:00.0002006-03-10 10:50:00.000401
4 72462006-03-10 10:10:00.0002006-03-10 12:40:00.0001501
5 72472006-03-10 10:10:00.0002006-03-10 12:40:00.0001501
6 72612006-03-10 08:00:00.0002006-03-10 09:00:00.000601
7 72612006-03-10 09:00:00.0002006-03-10 09:10:00.000102
8 72612006-03-10 09:10:00.0002006-03-10 09:20:00.000103
9 72612006-03-10 09:20:00.0002006-03-10 09:40:00.000204
10 72612006-03-10 09:40:00.0002006-03-10 10:30:00.000503
11 72612006-03-10 10:30:00.0002006-03-10 11:00:00.000302
12 72612006-03-10 11:00:00.0002006-03-10 13:00:00.00012014、計算結果説明:Mid為各清洗池的編號;st為工作階段起點;et為工作階段終點。Idinput_time
14836225.0000
1483745.0000
1483821.6667
148418.3333
1484246.0000
14843150.0000
14844150.0000
1484540.0000這個條件也非常重要
(( a.st >= b.st and a.st < b.et ) or ( a.st <= b.st and a.et > b.st ))
a為工作記錄表
b為時間段表
1、清洗池工作記錄:説明:Mid為各清洗池的編號;st為起始工作時間;et為完成工作時間。Id MId st et
14836 7261 2006-03-10 08:00:00.000 2006-03-10 13:00:00.000
14837 7261 2006-03-10 09:00:00.000 2006-03-10 11:00:00.000
14838 7261 2006-03-10 09:20:00.000 2006-03-10 10:30:00.000
14841 7261 2006-03-10 09:10:00.000 2006-03-10 09:40:00.000
14842 7225 2006-03-10 09:10:00.000 2006-03-10 09:56:00.000
14843 7246 2006-03-10 10:10:00.000 2006-03-10 12:40:00.000
14844 7247 2006-03-10 10:10:00.000 2006-03-10 12:40:00.000
14845 7225 2006-03-10 10:10:00.000 2006-03-10 10:50:00.0002、各清洗池的工作時間段説明:Mid為各清洗池的編號;dt各清洗池的各工作時間點。id Mid dt
1 7225 2006-03-10 09:10:00.000
2 7225 2006-03-10 09:56:00.000
3 7225 2006-03-10 10:10:00.000
4 7225 2006-03-10 10:50:00.000
5 7246 2006-03-10 10:10:00.000
6 7246 2006-03-10 12:40:00.000
7 7247 2006-03-10 10:10:00.000
8 7247 2006-03-10 12:40:00.000
9 7261 2006-03-10 08:00:00.000
10 7261 2006-03-10 09:00:00.000
11 7261 2006-03-10 09:10:00.000
12 7261 2006-03-10 09:20:00.000
13 7261 2006-03-10 09:40:00.000
14 7261 2006-03-10 10:30:00.000
15 7261 2006-03-10 11:00:00.000
16 7261 2006-03-10 13:00:00.0003、各清洗池在其各工作階段的任務數説明:Mid為各清洗池的編號;st為工作階段起點;et為工作階段終點;
times為該工作段的時長;tasks為該該清洗池在階段的任務數。Id Mid st et times tasks
1 7225 2006-03-10 09:10:00.000 2006-03-10 09:56:00.000 46 1
2 7225 2006-03-10 09:56:00.000 2006-03-10 10:10:00.000 14 0
3 7225 2006-03-10 10:10:00.000 2006-03-10 10:50:00.000 40 1
4 7246 2006-03-10 10:10:00.000 2006-03-10 12:40:00.000 150 1
5 7247 2006-03-10 10:10:00.000 2006-03-10 12:40:00.000 150 1
6 7261 2006-03-10 08:00:00.000 2006-03-10 09:00:00.000 60 1
7 7261 2006-03-10 09:00:00.000 2006-03-10 09:10:00.000 10 2
8 7261 2006-03-10 09:10:00.000 2006-03-10 09:20:00.000 10 3
9 7261 2006-03-10 09:20:00.000 2006-03-10 09:40:00.000 20 4
10 7261 2006-03-10 09:40:00.000 2006-03-10 10:30:00.000 50 3
11 7261 2006-03-10 10:30:00.000 2006-03-10 11:00:00.000 30 2
12 7261 2006-03-10 11:00:00.000 2006-03-10 13:00:00.000 120 14、計算結果説明:Mid為各清洗池的編號;st為工作階段起點;et為工作階段終點。Id input_time
14836 225.0000
14837 45.0000
14838 21.6667
14841 8.3333
14842 46.0000
14843 150.0000
14844 150.0000
14845 40.0000