有一张表TABLE,如下数据:
字段  NAME     ,  TEST_DATE  ,     START_TIME      ,        STOP_TIME
      AA          2011-3-28        2011-3-28 09:00:00       2011-3-28 10:00:00
      AA          2011-3-28        2011-3-28 12:00:00       2011-3-28 14:00:00      
      AA          2011-3-28        2011-3-28 13:00:00       2011-3-28 18:00:00      
      BB           ......          ......
      BB           ......          ......要求:以NAME 和 TEST_DATE为分组;求AA中一天不重复START_TIME 和 STOP_TIME 时间和;
      如:第一条记录与第二天条记录中,有11点--12点时间差要 去掉;
      第三条记录有13--14点 在第二条记录中算过,这边要去掉只计14--18点这时间;
      反正在一天里面算出来时间不能超过24小时,算出来结果要除以24小时,算出利用率;

解决方案 »

  1.   

    --表名tt
    SELECT NAME,
           test_date,
           SUM((stop_time - CASE
                 WHEN start_time < nvl(p_stoptime, start_time) THEN
                  p_stoptime
                 ELSE
                  start_time
               END) * 24) / 24 * 100 "USE_RATIO(%)"
      FROM (SELECT t.*,
                   lag(t.stop_time) over(PARTITION BY t.name, t.test_date ORDER BY t.start_time) p_stoptime
              FROM tt t)
     GROUP BY NAME, test_date;