ITPUB??ì3
ITPUB论坛 » Oracle开发 » 求一句sql

标题: 求一句sql
离线 josephliu37
初级会员



精华贴数 0
个人空间 0
技术积分 16 (64759)
社区积分 0 (944665)
注册日期 2006-5-21
论坛徽章:0
      
      

发表于 2008-8-6 20:04 
求一句sql

一个滚积数的问题

表结构如下
积数 开始日期 结束日期
4  20080101 20080303
6  20080304 20080606
3  20080607 20080909

现在有个实际的开始结束日期,比如20080202~20080808,
这个日期段跨了3个积数段
就是希望一句sql,   写出  4 × (20080303 - 20080202) + 6 × (20080606 - 20080304 ) + 3 × (20080808 - 20080607) 这样的结果

谢谢大家。
还有个问题,比如我现在表里有一条记录,是个日期段,比如20080303~20080310
我能否把它变成8条记录,每天一条记录?


只看该作者    顶部
离线 newkid
资深新手
老程序员


来自 加拿大
精华贴数 0
个人空间 0
技术积分 1202 (1437)
社区积分 0 (119467)
注册日期 2004-6-26
论坛徽章:3
2008北京奥运纪念徽章:举重2008北京奥运纪念徽章:羽毛球    
      

发表于 2008-8-6 22:28 
我假设你都是日期型数据,如果不是自己用TO_DATE去转换:

SELECT SUM(积数* LEAST(结束日期,v_end_date) - GREATEST(开始日期, v_start_date) )
  FROM MY_TABLE
WHERE 结束日期>v_start_date
       AND 开始日期<v_end_date;


第二个问题:原理是这样,你自己可以写出变种,比如不用DUAL用你自己的表:
SELECT v_start_date+LEVEL-1 AS MY_DATE      
  FROM DUAL
  CONNECT BY LEVEL<=v_end_date - v_start_date +1;


__________________
中国加油!
只看该作者    顶部
离线 grubbyoo
▃▃,~


来自 夕阳小画
精华贴数 1
个人空间 0
技术积分 1234 (1392)
社区积分 332 (1725)
注册日期 2007-3-1
论坛徽章:16
2008北京奥运纪念徽章:自行车2008北京奥运纪念徽章:现代五项2008北京奥运纪念徽章:手球2008北京奥运纪念徽章:沙滩排球2008北京奥运纪念徽章:射箭2008北京奥运纪念徽章:柔道
      

发表于 2008-8-6 22:30 
select  sum((end_time-start_time)*p)
       -(20080202-min(start_time))* min(p) keep( dense_rank first order by start_time)
       -(max(end_time)-20080808)* max(p) keep( dense_rank last order by start_time)
from mar06
where start_time<='20080808'
and  end_time>='20080202'


__________________
走到哪里才不是过客
吸烟有益心情
▃▃,~
只看该作者    顶部
离线 josephliu37
初级会员



精华贴数 0
个人空间 0
技术积分 16 (64759)
社区积分 0 (944665)
注册日期 2006-5-21
论坛徽章:0
      
      

发表于 2008-8-7 18:51 
谢谢,itpub果然达人多,
以前一直只知道怎么把多条数据变一条,
不知道怎么把一条变多条


只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问