现有数据库结构如下:开始时间 结束时间 价格
2010-1-1 2010-1-10 1
2010-1-11 2010-1-20 2
2010-1-21 2010-1-30 3
先要求用sql查出某个时间段的价格之和
比如输入参数 开始时间:2010-1-5 结束时间:2010-1-25
结果应该是 5号到10号的价钱之和(6) + 11-20号的价钱之和(10) + 21到25号的价钱之和(5)
而不是简单的三条记录的sum
2010-1-1 2010-1-10 1
2010-1-11 2010-1-20 2
2010-1-21 2010-1-30 3
先要求用sql查出某个时间段的价格之和
比如输入参数 开始时间:2010-1-5 结束时间:2010-1-25
结果应该是 5号到10号的价钱之和(6) + 11-20号的价钱之和(10) + 21到25号的价钱之和(5)
而不是简单的三条记录的sum
解决方案 »
- 关于oracle 11g 二进制存储的解决方案
- Oracle中如何把存进去的二进制文件转换成图片文件
- 如何在一个表里查询两批数据量大的不同数据记录?
- 如何在一个项目里既连接SQLserver又连接ORACLE
- 请高手写一个SQL,有一个表A,根据某种条件选出若干条记录,其中每一条记录都与另外一个表B中若干条记录相关联,我现在想在A的没一条记录
- ORACLE数据库当掉.
- 高分简单问题,在线散分,急!!!
- 请问 sql语句里加减秒用什么函数
- 在数据库中如何进行无关系关联的多表联合查询?
- 求助:需要在APEX 动态操作中的PL/SQL语句块做一个确认取消对话框,求大神指教,最好有代码,谢谢
- 求助各位大鸟级别
- 菜鸟问题
(
s_dt date,
e_dt date,
price number
);insert into test values(to_date('20100101','yyyymmdd'),to_date('20100110','yyyymmdd'),1);
insert into test values(to_date('20100111','yyyymmdd'),to_date('20100120','yyyymmdd'),2);
insert into test values(to_date('20100121','yyyymmdd'),to_date('20100130','yyyymmdd'),3);
select sum(case when to_date('20100105','yyyymmdd') between s_dt and e_dt then
price*(e_dt - to_date('20100105','yyyymmdd')+1)
when to_date('20100125','yyyymmdd') between s_dt and e_dt then
price*( to_date('20100125','yyyymmdd') - s_dt +1)
when to_date('20100105','yyyymmdd') < s_dt and to_date('20100125','yyyymmdd')>e_dt then
price*(e_dt-s_dt+1)
end)
from test;
-----------------------------------------------
41
--参考
select p1,p2,p3
from (
select (select price
from tb
where dt between to_date('20110105','yyyymmdd')
and to_date('20110110','yyyymmdd')) p1,
(select price
from tb
where dt between to_date('20110111','yyyymmdd')
and to_date('20110120','yyyymmdd')) p2,
(select price
from tb
where dt between to_date('20110121','yyyymmdd')
and to_date('20110125','yyyymmdd')) p3
from dual)
/
select case when dt between to_date('20110105','yyyymmdd')and to_date('20110110','yyyymmdd')
then price end p1,
case when dt between to_date('20110111','yyyymmdd')and to_date('20110120','yyyymmdd')
then price end p2,
case when dt between to_date('20110121','yyyymmdd')and to_date('20110125','yyyymmdd')
then price end p3
from tb
/