create table test(
value number(10),
cur_date date
)现在做想这样的查询,查询出某一天的累计值(从该月1号到当天sum(value))与上一月的同期累计值,条件 cur_date
例如:输入条件 20080808 查询出 20080801-20080808 累计值 20080701-20080708 累计值用一条语句查询出来,高手指点。。谢谢
value number(10),
cur_date date
)现在做想这样的查询,查询出某一天的累计值(从该月1号到当天sum(value))与上一月的同期累计值,条件 cur_date
例如:输入条件 20080808 查询出 20080801-20080808 累计值 20080701-20080708 累计值用一条语句查询出来,高手指点。。谢谢
解决方案 »
- oracle中更新数据问题
- 根据正负进行统计
- round取小数的疑问
- 求救高手.一个关于两个数据库之间导入或导出数据的问题.在线等,很急!!!!!!!11
- 打包安装Oracle时用InstallShield Express为什么总提示OraOLEDBPUS:找不到指定的模块?
- 在储存过程中执行创建表的脚本出错,不知怎么回事!!!
- 哪儿有Oracle 8i R2 (8.1.6) for Windows 2000 下载,找了好久都没有打到啊
- Oracle的WebDB如何安装,在那里,请高手不吝赐教??
- 请问各位一下:怎么调试带 OUT 参数的存储过程?
- oracle?搞什么鬼???
- 如何提高这个sql的查询效率
- 菜鸟级提问,为什么我的oracle循环总是多一次,请高人提点
where (cur_date between 20080801 and 20080808) or (cur_date between 20080701 and 20080708 )
Group by To_char(cur_date,'yyyymm')
;
把所有的20080808改成你查询的日期:SELECT TRUNC(CUR_DATE, 'mm'), SUM(VALUE)
FROM TEST
WHERE TRUNC(CUR_DATE) BETWEEN TRUNC(SYSDATE, 'mm') AND
TO_DATE('20080808', 'yyyymmdd')
OR TRUNC(CUR_DATE) BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'mm'), -1) AND
ADD_MONTHS(TO_DATE('20080808', 'yyyymmdd'), -1)
GROUP BY TRUNC(CUR_DATE, 'mm');
SQL> select * from tbl; VALUE CUR_DATE
---------- ---------
50 01-JUL-08
10 05-JUL-08
60 06-JUL-08
40 11-JUL-08
20 01-AUG-08
10 05-AUG-08
70 06-AUG-08
30 11-AUG-088 rows selected.SQL> select sum(case when cur_date>=last_day(add_months(to_date('20080808','yyyymmdd'),-2))+1 and cur_date<=add_months(t
o_date('20080808','yyyymmdd'),-1)
2 then value else 0 end
3 ) total1,
4 sum(case when cur_date>=last_day(add_months(to_date('20080808','yyyymmdd'),-1))+1 and cur_date<=to_date('20080808',
'yyyymmdd')
5 then value else 0 end
6 ) total2
7 from tbl; TOTAL1 TOTAL2
---------- ----------
120 100SQL>
FROM TEST1
WHERE TRUNC(CUR_DATE) BETWEEN TRUNC(SYSDATE, 'mm') AND
TO_DATE(to_char(sysdate, 'yyyymmdd'), 'yyyymmdd')
OR TRUNC(CUR_DATE) BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'mm'), -1) AND
ADD_MONTHS(TO_DATE(to_char(sysdate, 'yyyymmdd'), 'yyyymmdd'), -1)
GROUP BY TRUNC(CUR_DATE, 'mm');
这样子就不用输入参数了.就是计算到当天的
FROM TEST1
WHERE TRUNC(CUR_DATE) BETWEEN TRUNC(SYSDATE, 'mm') AND
trunc(sysdate, 'dd')
OR TRUNC(CUR_DATE) BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'mm'), -1) AND
ADD_MONTHS(trunc(sysdate, 'dd'), -1)
GROUP BY TRUNC(CUR_DATE, 'mm');刚刚查了下TRUNC用法,发现trunc(sysdate, 'dd')就表示当天的意思,这样子应该更简单些