当前位置: 代码迷 >> Oracle技术 >> oracle:sql怎么取出多条时间区间在每隔30分钟拼接好
  详细解决方案

oracle:sql怎么取出多条时间区间在每隔30分钟拼接好

热度:90   发布时间:2016-04-24 08:08:13.0
oracle:sql如何取出多条时间区间在每隔30分钟拼接好
数据库表示这样的
id begintime endtime
sql取出是:1001 2014-07-25 00:00:00 2014-07-25 06:00:00
                     1001 2014-07-25 09:00:00 2014-07-25 12:30:00
                      1001 2014-07-25 15:00:00 2014-07-25 19:15:00
每隔30分钟拼接好
       00:00-00:30
       00:30-01:00
           .......
      18:30-19:00
       19:00-19:15

怎么写呢,求助
------解决方案--------------------
引用:
数据库表示这样的
id begintime endtime
sql取出是:1001 2014-07-25 00:00:00 2014-07-25 06:00:00
                     1001 2014-07-25 09:00:00 2014-07-25 12:30:00
                      1001 2014-07-25 15:00:00 2014-07-25 19:15:00
每隔30分钟拼接好
       00:00-00:30
       00:30-01:00
           .......
      18:30-19:00
       19:00-19:15

怎么写呢,求助


with t as
 (select 1001 id,
         to_date('20140725 00:00:00', 'yyyymmdd hh24:mi:ss') begintime,
         to_date('20140725 06:00:00', 'yyyymmdd hh24:mi:ss') endtime
    from dual
  union all
  select 1001 id,
         to_date('20140725 09:00:00', 'yyyymmdd hh24:mi:ss') begintime,
         to_date('20140725 12:30:00', 'yyyymmdd hh24:mi:ss') endtime
    from dual
  union all
  select 1001 id,
         to_date('20140725 15:00:00', 'yyyymmdd hh24:mi:ss') begintime,
         to_date('20140725 19:15:00', 'yyyymmdd hh24:mi:ss') endtime
    from dual)
select id,to_char(t1,'yyyymmdd hh24:mi:ss')
------解决方案--------------------
'~'
------解决方案--------------------
to_char(t2,'yyyymmdd hh24:mi:ss')
  from (select id,
               time t1,
               lead(time) over(partition by id, rn order by time) t2
          from (select id, rn, begintime + (level - 1) * 30 / 24 / 60 time
                  from (select t.*, rownum rn from t)
                connect by prior
                            begintime + (level - 1) * 30 / 24 / 60 <= endtime
                       and prior rn = rn
                       and prior dbms_random.value is not null
                union
                select id, rownum, endtime
                  from t))
 where t2 is not null;
  相关解决方案