with tb1 as (
  select '当前时间' STARTDATE,'当前时间+一号的时间(1天)' ENDDATE,'1号' HAOMA,'1.000000' CVALUE,'DAY' CVALUE_UOM from dual
  union all
  select '当前时间+一号的时间(1天)','当前时间+二号的时间(1天)+一号时间(1天)','2号','1.000000','DAY' from dual
  union all
  select '当前时间+二号的时间(1天)+一号时间(1天)','当前时间+三号的时间(2周)+二号的时间(1天)+一号时间(1天)','3号','2.000000','WEEK' from dual
  union all
  select '当前时间+三号的时间(2周)+二号的时间(1天)+一号时间(1天)','当前时间+四号的时间(2周)+三号的时间(2周)+二号的时间(1天)+一号时间(1天)','4号','2.000000','WEEK' from dual
  union all
  select '当前时间+四号的时间(2周)+三号的时间(2周)+二号的时间(1天)+一号时间(1天)','当前时间+五号的时间(3分钟)+四号的时间(2周)+三号的时间(2周)+二号的时间(1天)+一号时间(1天)','5号','3.000000','MINUTE' from dual  
  )
  select * from tb1;-------------------------------------------------------------------------------------------
如何将我的中文字变成相应的oracle语句计算(有发过同样的一个帖)

解决方案 »

  1.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  2.   

    想得到的结果是
    STARTDATE            ENDDATE         HAOMA    CVALUE CVALUE_UOM
    2011-2-9 21:26:00  2011-2-10 21:26:00 1号     1        DAY
    2011-2-10 21:26:00  2011-2-11 21:26:00 2号     1        DAY
    2011-2-11 21:26:00  2011-2-25 21:26:00 3号     2        WEEK
    2011-2-25 21:26:00  2011-3-11 21:26:00 4号     2       WEEK
    2011-3-11 21:26:00  2011-3-11 21:29:00 5号     3        MINUTE
      

  3.   

    思路就是算开始时间(STARTDATE)是不加自己的时间的
    算结束时间(ENDDATE )时才加上自己的时间
      

  4.   

    我用的数据库是oracle的(我以为我是在oracle上发的贴就应该不用说这个了吧)
      

  5.   


    with tab as(
    select to_date(null) startdate, to_date(null) enddate, '1号' haoma, 1 cvalue, 'DAY' cvalue_uom from dual
    union all  
    select to_date(null) , to_date(null) , '2号' , 1 , 'DAY' from dual
    union all  
    select to_date(null) , to_date(null) , '3号' , 2 , 'WEEK' from dual
    union all  
    select to_date(null) , to_date(null) , '4号' , 2 , 'WEEK' from dual
    union all  
    select to_date(null) , to_date(null) , '5号' , 3 , 'MINUTE' from dual
    )
    select Lag(enddate,1,startdate)over(order by haoma) startdate,
           enddate,
           haoma,  
           cvalue,
           cvalue_uom
    from(
    select nvl(enddate,sysdate) startdate,
           nvl(enddate,sysdate) +
           sum(
               case when cvalue_uom='DAY' then cvalue  
                    when cvalue_uom='WEEK' then cvalue*7
                    when cvalue_uom='MONTH' then cvalue*30
                    when cvalue_uom='MINUTE' then cvalue/1440
               end 
           )over(order by haoma) enddate,
           haoma,  
           cvalue,
           cvalue_uom
    from tab
    )
      

  6.   

    --测试了,是OK的with tab as(
    select to_date(null) startdate, to_date(null) enddate, '1号' haoma, 1 cvalue, 'DAY' cvalue_uom from dual
    union all  
    select to_date(null) , to_date(null) , '2号' , 1 , 'DAY' from dual
    union all  
    select to_date(null) , to_date(null) , '3号' , 2 , 'WEEK' from dual
    union all  
    select to_date(null) , to_date(null) , '4号' , 2 , 'WEEK' from dual
    union all  
    select to_date(null) , to_date(null) , '5号' , 3 , 'MINUTE' from dual
    )
    select Lag(enddate,1,startdate)over(order by haoma) startdate,
           enddate,
           haoma,  
           cvalue,
           cvalue_uom
    from(
        select nvl(enddate,sysdate) startdate,
              nvl(enddate,sysdate) +
              sum(
                  case when cvalue_uom='DAY' then cvalue  
                        when cvalue_uom='WEEK' then cvalue*7
                        when cvalue_uom='MONTH' then cvalue*30
                        when cvalue_uom='MINUTE' then cvalue/1440
                  end 
              )over(order by haoma) enddate,
              haoma,  
              cvalue,
              cvalue_uom
        from tab
    )--结果:
    STARTDATE              ENDDATE                HAOMA   CVALUE  CVALUE_UOM
    --------------------   --------------------   ------  ------  ------------
    2011.02.10 09:25:18    2011.02.11 09:25:18    1号     1       DAY   
    2011.02.11 09:25:18    2011.02.12 09:25:18    2号     1       DAY   
    2011.02.12 09:25:18    2011.02.26 09:25:18    3号     2       WEEK  
    2011.02.26 09:25:18    2011.03.12 09:25:18    4号     2       WEEK  
    2011.03.12 09:25:18    2011.03.12 09:28:18    5号     3       MINUTE
      

  7.   


    --上面一个地方要修改下,nvl(enddate,sysdate) 改成 nvl(startdate,sysdate) 
    select Lag(enddate,1,startdate)over(order by haoma) startdate,
           enddate,
           haoma,  
           cvalue,
           cvalue_uom
    from(
        select nvl(startdate,sysdate) startdate,  --修改处
                 nvl(startdate,sysdate) +           --修改处
                 sum(
                   case when cvalue_uom='DAY' then cvalue  
                        when cvalue_uom='WEEK' then cvalue*7
                        when cvalue_uom='MONTH' then cvalue*30
                        when cvalue_uom='MINUTE' then cvalue/1440
                   end 
                )over(order by haoma) enddate,
                haoma,  
                cvalue,
                cvalue_uom
        from tab
    )