首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

求一疑难SQL语句解决办法

2012-03-16 
求一疑难SQL语句如下数据:ID数量开始日期结束日期1120002012-2-12012-2-10290002012-2-62012-2-15...我想

求一疑难SQL语句
如下数据:

ID 数量 开始日期 结束日期
1 12000 2012-2-1 2012-2-10
2 9000 2012-2-6 2012-2-15
...

我想得到时间范围内的每天平均数汇总,并且按天分别显示,如下:

日期 数量
2012-2-1 1200 (只有ID1的数量)
2012-2-2 1200
...
2012-2-6 2100 (ID1和ID2的数量相加)
...
2012-2-11 900 (只有ID2的数量)

给定一个日期范围条件(比如这里是2012-2-1至2012-2-11),有没有用一句SQL实现的方法,非存储过程?


[解决办法]

SQL code
--你的例子[SYS@myoracle] SQL>WITH t1 AS(  2   SELECT 1 ID, 1200 数量,DATE'2012-02-01' 开始日期,DATE'2012-02-10' 结束日期 FROM dual  3   UNION ALL  4   SELECT 2 ID, 900 数量,DATE'2012-02-06' 开始日期,DATE'2012-02-15' 结束日期 FROM dual  5  )SELECT 开始日期+Lev-1,SUM(数量)  6     FROM t1,(SELECT LEVEL Lev FROM dual CONNECT BY LEVEL <=31) t2  7    WHERE 开始日期+Lev-1 <= 结束日期  8      AND 开始日期+Lev-1 BETWEEN DATE'2012-02-01' AND DATE'2012-02-11'  9    GROUP BY 开始日期+Lev-1 10   ORDER BY 1;开始日期+L  SUM(数量)---------- ----------2012-02-01       12002012-02-02       12002012-02-03       12002012-02-04       12002012-02-05       12002012-02-06       21002012-02-07       21002012-02-08       21002012-02-09       21002012-02-10       21002012-02-11        900已选择11行。--我自己多谢了几条数据[SYS@myoracle] SQL>WITH t1 AS(  2   SELECT 1 ID, 1200 数量,DATE'2012-02-01' 开始日期,DATE'2012-02-10' 结束日期 FROM dual  3   UNION ALL  4   SELECT 2 ID, 900 数量,DATE'2012-02-06' 开始日期,DATE'2012-02-15' 结束日期 FROM dual  5   UNION ALL  6   SELECT 3 ID, 300 数量,DATE'2012-02-03' 开始日期,DATE'2012-02-05' 结束日期 FROM dual  7   UNION ALL  8   SELECT 4 ID, 500 数量,DATE'2012-02-11' 开始日期,DATE'2012-02-25' 结束日期 FROM dual  9  )SELECT 开始日期+Lev-1,SUM(数量) 10     FROM t1,(SELECT LEVEL Lev FROM dual CONNECT BY LEVEL <=31) t2 11    WHERE 开始日期+Lev-1 <= 结束日期 12      AND 开始日期+Lev-1 BETWEEN DATE'2012-02-01' AND DATE'2012-02-15' --这个是你的条件 13    GROUP BY 开始日期+Lev-1 14   ORDER BY 1;开始日期+L  SUM(数量)---------- ----------2012-02-01       12002012-02-02       12002012-02-03       15002012-02-04       15002012-02-05       15002012-02-06       21002012-02-07       21002012-02-08       21002012-02-09       21002012-02-10       21002012-02-11       14002012-02-12       14002012-02-13       14002012-02-14       14002012-02-15       1400已选择15行。[SYS@myoracle] SQL> 

热点排行