解决方案 »

  1.   

    原来昨晚那个是为了构造这个表。这个更新如果换一种思路会变得很简单,sql和程序语言的思想是不一样的,更需要从集合处理方面优先考虑,假设Log表中的结果是这样,那么问题就变成在某个特定的时间点有多少个begin end time.
    SQL> select to_char(begin_time,'yyyymmdd HH24:MI:SS') begin_time,
      2  to_char(end_time,'yyyymmdd HH24:MI:SS')  end_time from s_job_log s
      3  /
     
    BEGIN_TIME        END_TIME
    ----------------- -----------------
    20140717 12:00:01 20140717 13:00:01
    20140717 12:00:01 20140717 22:00:01
    20140717 02:00:01 20140717 21:00:01很容易得到如下结果集,
    SELECT t1.onedayss, COUNT(l.rowid) cnt
      FROM oneday t1, s_job_log l
     WHERE to_date(t1.onedayss, 'yyyymmdd HH24:MI:SS') BETWEEN l.begin_time(+) AND l.end_time(+)
     GROUP BY t1.onedayss 直接insert到oneday2表中即可,不需要事先构造oneday2表再更新。