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语句计算(有发过同样的一个帖)
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语句计算(有发过同样的一个帖)
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
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
算结束时间(ENDDATE )时才加上自己的时间
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
)
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
--上面一个地方要修改下,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
)