有这样一批数据,想进行周统计
日期 面积 金额
2010-7-6 17:10 126.64 360164
2010-7-6 18:24 127.2 453748
2010-7-13 9:22 221.13 663390
2010-7-5 17:26 36.88 332510
2010-7-6 18:02 127.2 457119
2010-7-4 14:53 88.46 169401
2010-7-19 9:38 122.74 410258
2010-7-15 11:15 76.93 145782
2010-7-11 17:00 78.74 150787
2010-7-4 9:37 76.93 146552
2010-8-14 9:30 62.42 259043
2010-8-13 15:59 119.18 449130
2010-8-12 10:59 61.89 163390
2010-8-12 11:41 168.68 568384
2010-8-12 16:52 196.28 821569
2010-10-14 17:32 156.08 591855
2010-8-13 18:18 998.8 3076304
2010-8-14 10:23 98.86 310420
2010-8-14 11:55 159.49 600193
2010-8-14 14:28 124.31 472055
2010-8-15 11:37 126.54 499567
2010-8-15 16:18 125.79 395710
.....
统计结果类似:
日期始 日期终 面积 金额
2010-7-4 2010-7-10
2010-7-11 2010-7-17
2010-7-18 2010-7-24
2010-7-25 2010-7-31
2010-8-1 2010-8-7 想请教一下,该如何写查询语句,数据库为Oracle.
现参考了一下
http://topic.csdn.net/u/20070206/18/CCE1BE88-C576-4F5D-A9CB-9384FE4126D1.html,把datediff,dateadd,datepart这三个SQLServer函数用ORALCE自定义函数实现了,可结果划分的周日期不对
日期 面积 金额
2010-7-6 17:10 126.64 360164
2010-7-6 18:24 127.2 453748
2010-7-13 9:22 221.13 663390
2010-7-5 17:26 36.88 332510
2010-7-6 18:02 127.2 457119
2010-7-4 14:53 88.46 169401
2010-7-19 9:38 122.74 410258
2010-7-15 11:15 76.93 145782
2010-7-11 17:00 78.74 150787
2010-7-4 9:37 76.93 146552
2010-8-14 9:30 62.42 259043
2010-8-13 15:59 119.18 449130
2010-8-12 10:59 61.89 163390
2010-8-12 11:41 168.68 568384
2010-8-12 16:52 196.28 821569
2010-10-14 17:32 156.08 591855
2010-8-13 18:18 998.8 3076304
2010-8-14 10:23 98.86 310420
2010-8-14 11:55 159.49 600193
2010-8-14 14:28 124.31 472055
2010-8-15 11:37 126.54 499567
2010-8-15 16:18 125.79 395710
.....
统计结果类似:
日期始 日期终 面积 金额
2010-7-4 2010-7-10
2010-7-11 2010-7-17
2010-7-18 2010-7-24
2010-7-25 2010-7-31
2010-8-1 2010-8-7 想请教一下,该如何写查询语句,数据库为Oracle.
现参考了一下
http://topic.csdn.net/u/20070206/18/CCE1BE88-C576-4F5D-A9CB-9384FE4126D1.html,把datediff,dateadd,datepart这三个SQLServer函数用ORALCE自定义函数实现了,可结果划分的周日期不对
from (select TO_CHAR(thedate - TO_NUMBER(TO_CHAR(thedate, 'D')) + 2,
'YYYY-MM-DD') weekStartDay, --日期所在星期第一天
TO_CHAR(thedate - TO_NUMBER(TO_CHAR(thedate, 'D')) + 9,
'YYYY-MM-DD') weekEnDayd, --日期所在星期的最后一天
area, --面积
amount, -- 金额
from tab_name) t
group by t.weekStartDate, t.weekEndDate;
创建表:create table tab_name(
thedate date,
area number(9,2),
amount number(9,2)
);
测试数据:
1 2011/3/19 15:45:59 20.00 30.00
2 2011/3/18 15:46:12 20.00 30.00
3 2011/3/17 15:46:19 20.00 30.00
4 2011/3/16 15:46:25 20.00 30.00
5 2011/3/15 15:46:31 20.00 30.00
6 2011/3/14 15:46:37 20.00 30.00
7 2011/3/13 15:46:49 20.00 30.00
8 2011/3/12 15:46:58 20.00 30.00
9 2011/3/11 15:47:04 20.00 30.00
运行结果:
1 2011-03-07 2011-03-13 60 90
2 2011-03-14 2011-03-20 120 180
select t.weekStartDate, t.weekEndDate, sum(area), sum(amount)
from (select TO_CHAR(thedate - TO_NUMBER(TO_CHAR(thedate - 1, 'D')) + 1,
'YYYY-MM-DD') weekStartDate, --当前日期所在星期第一天
TO_CHAR(thedate - TO_NUMBER(TO_CHAR(thedate - 1, 'D')) + 7,
'YYYY-MM-DD') weekEndDate, --当前日期所在星期的最后一天
area, --面积
amount -- 金额
from tab_name) t
group by t.weekStartDate, t.weekEndDate;
得到的结果是星期日开始作为第1天的,
那么星期一就是第2天,星期日就是第8天
*/
SELECT TO_CHAR( SYSDATE ,'YYYY-MM-DD' ) 今天,
DECODE(TO_CHAR(SYSDATE,'D'),
'1','星期日',
'2','星期一',
'3','星期二',
'4','星期三',
'5','星期四',
'6','星期五',
'7','星期六') 星期几,
TO_CHAR( SYSDATE - TO_NUMBER( TO_CHAR(SYSDATE,'D') ) + 2,'YYYY-MM-DD' ) 星期一,
TO_CHAR( SYSDATE - TO_NUMBER( TO_CHAR(SYSDATE,'D') ) + 8,'YYYY-MM-DD' ) 星期日
FROM DUAL
直接trunc(日期,'D')就行了
select trunc(dt,'D')
,trunc(dt,'D')+6
,sum(area)
,sum(amount)
from tab
group by trunc(dt,'D'),trunc(dt,'D') +6
;
from (
select next_day(日期-7,'Monday') 新日期,日期,金额
from 表 )
group by 新日期