请教一计算投入时间的问题,急!

smile9961 2006-03-07 11:51:55

有一清洗池,在某一天的清洗工作记录如下:

产品 开始清洗时间 完成清洗时间
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 。
我试了下,但写不出来,恳请大家帮忙。非常感谢!
...全文
196 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
smile9961 2006-03-11
  • 打赏
  • 举报
回复
真糟糕,我的tab全沒了:


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.000

2、各清洗池的工作時間段

説明: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.000

3、各清洗池在其各工作階段的任務數

説明: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 1

4、計算結果

説明: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
smile9961 2006-03-11
  • 打赏
  • 举报
回复
非常感謝大家對我的幫助和熱情參與!
問題解決了,我是用的存儲過程;這個問題關鍵在算法,只要想相通了用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.000

2、各清洗池的工作時間段

説明: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.000

3、各清洗池在其各工作階段的任務數

説明: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.0001201

4、計算結果

説明: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為時間段表

云中客 2006-03-08
  • 打赏
  • 举报
回复
是指一天、一在个小时,还时指同一次清洗物品
如果是最后一个,那你的例子里也没有啊
云中客 2006-03-08
  • 打赏
  • 举报
回复
如果同一时间段做N件物品,那么每个物品的投入时间即为该时段的1/N
请问:同一时间段是指什么
chinank 2006-03-08
  • 打赏
  • 举报
回复
筛选时在where里写要的时间段
chinank 2006-03-08
  • 打赏
  • 举报
回复
字符串取值问题,
怎么想得就怎么写,

思路:
先从数据库中分类筛选出各个物品的清洗时间(字符串算法),然后作除法,分别负值
smile9961 2006-03-08
  • 打赏
  • 举报
回复
對於
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

請問可以通過存儲過程實現嗎?

$扫地僧$ 2006-03-07
  • 打赏
  • 举报
回复
select 产品,sum(datediff(hh,开始清洗时间,完成清洗时间)) as num from 表 group by 产品
smile9961 2006-03-07
  • 打赏
  • 举报
回复
还有如果
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

_____________________________________________________________
沒錯,我就是想得到這樣的結果,哪位能幫我一下?
yuweiwei 2006-03-07
  • 打赏
  • 举报
回复
还有如果 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 ?
$扫地僧$ 2006-03-07
  • 打赏
  • 举报
回复
如果这样 :

产品 开始清洗时间 完成清洗时间
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

你可不可以把你要的结果 写给我看一下啊!?


smile9961 2006-03-07
  • 打赏
  • 举报
回复
也有跨天的情況
smile9961 2006-03-07
  • 打赏
  • 举报
回复
scmail81(琳·风の狼) 非常感謝你的回復,我試了下,但執行結果怎麼時這樣的?

prod1 .020000000000
prod2 .020000000000
prod3 .020000000000
prod4 .020000000000
$扫地僧$ 2006-03-07
  • 打赏
  • 举报
回复
create table A
(
产品 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
$扫地僧$ 2006-03-07
  • 打赏
  • 举报
回复
你这个要不要算跨天的啊!?
$扫地僧$ 2006-03-07
  • 打赏
  • 举报
回复
应该是这样
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.产品

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧