有一清洗池,在某一天的清洗工作记录如下:产品 开始清洗时间 完成清洗时间
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 。
我试了下,但写不出来,恳请大家帮忙。非常感谢!

解决方案 »

  1.   

    select 产品,sum(datediff(hh,开始清洗时间,完成清洗时间)) as num from 表 group by 产品
      

  2.   

    应该是这样
    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.产品
      

  3.   

    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
      

  4.   

    scmail81(琳·风の狼) 非常感謝你的回復,我試了下,但執行結果怎麼時這樣的?prod1 .020000000000
    prod2 .020000000000
    prod3 .020000000000
    prod4 .020000000000
      

  5.   

    如果这样 :产品 开始清洗时间 完成清洗时间
    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你可不可以把你要的结果 写给我看一下啊!?
      

  6.   

    还有如果 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  ?
      

  7.   

    还有如果 
    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  _____________________________________________________________
    沒錯,我就是想得到這樣的結果,哪位能幫我一下?
      

  8.   

    對於
    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  請問可以通過存儲過程實現嗎?
      

  9.   

    筛选时在where里写要的时间段
      

  10.   

    非常感謝大家對我的幫助和熱情參與!
    問題解決了,我是用的存儲過程;這個問題關鍵在算法,只要想相通了用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為時間段表
      

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