年 月 季度 统计问题

yiyicun 2011-03-02 03:27:07
表 BOXENERGY
ID BOXID DATE ENERGY
1 1 2010-01-01 5.6
2 1 2010-01-02 5.7
3 1 2010-01-03 5.5
4 1 2010-01-04 5.3
.................................

365 1 2010-12-31 5.3
366 1 2011-01-01 5.4
.................................

xxx 2 2010-01-01 5.8
xxx 2 2010-01-02 5.7
xxx 2 2010-01-03 5.8


ID主键 有N个BOXID 对应每天的能耗数据
现要按年 、季度 、月 、星期 求 ENERGY 的和

N可以是全部 单个 也可以是一部分

用了substr 可以求年 月 但季度 星期不好弄

用什么方法能统一一点呢?

...全文
158 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
yiyicun 2011-03-03
  • 打赏
  • 举报
回复
trunc 之后移动一天就好了嘛。

select trunc(sysdate, 'day') + 1 from dual;


结果还是 上个星期天到这个星期六
humanity 2011-03-03
  • 打赏
  • 举报
回复
trunc 之后移动一天就好了嘛。

select trunc(sysdate, 'day') + 1 from dual;


[Quote=引用 17 楼 yiyicun 的回复:]

select to_char(sysdate,'day') from dual;

TO_CHAR(SYSDA
-------------
thursday

这力统计的是上个星期天到这个星期六 为1周
我们一般是星期一到星期天
[/Quote]
yiyicun 2011-03-03
  • 打赏
  • 举报
回复
select to_char(sysdate,'day') from dual;

TO_CHAR(SYSDA
-------------
thursday

这力统计的是上个星期天到这个星期六 为1周
我们一般是星期一到星期天
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 zhuomingwang 的回复:]
引用 14 楼 yiyicun 的回复:
还差个按周汇总
Q 是季度的话 周是什么?


SQL code

select to_char(sysdate,'day') from dual;

TO_CHAR(SYSDA
-------------
thursday
[/Quote]

--当前时间为年的第几周 (注意当前年的第一天为周几)
select to_char(sysdate,'ww') from dual;

--当前时间为月的第几周 (注意当前月的第一天为周几)
select to_char(sysdate,'w') from dual;
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 yiyicun 的回复:]
还差个按周汇总
Q 是季度的话 周是什么?
[/Quote]

select to_char(sysdate,'day') from dual;

TO_CHAR(SYSDA
-------------
thursday
yiyicun 2011-03-03
  • 打赏
  • 举报
回复
还差个按周汇总
Q 是季度的话 周是什么?
yiyicun 2011-03-02
  • 打赏
  • 举报
回复
可以编译了 有点事 明天再研究
thank you`
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yiyicun 的回复:]
ORA-01722: 无效数字 日期是字符串类型

Qu是什么意思?
[/Quote]
不知道为什么要把存储时间字段设为字符型
不是有date类型嘛,给以后的工作造成了不便啊
kingkingzhu 2011-03-02
  • 打赏
  • 举报
回复
haha 罗大侠出手 果断搞定啊
关键是q 不是qu
luoyoumou 2011-03-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yiyicun 的回复:]

ORA-01722: 无效数字 日期是字符串类型

Qu是什么意思?
[/Quote]

-- Qu 是给这个字段取的别名,你想取什么名字都成!(不会吧:这么简单的东东也不会?)
luoyoumou 2011-03-02
  • 打赏
  • 举报
回复
-- 那就加个to_date()函数,先将其转换成日期类型: 
SELECT BOXID, trunc(to_date(date_column,'yyyy-mm-dd'),'Q') as Qu, sum(energy) as energy FROM boxenergy group by boxid, trunc(to_date(date_column,'yyyy-mm-dd'),'Q');

luoyoumou 2011-03-02
  • 打赏
  • 举报
回复
-- 那就加个to_date()函数,先将其转换成日期类型:
SELECT BOXID, trunc(to_date(date_column,'yyyy-mm-dd),'Q') as Qu, sum(energy) as energy
FROM boxenergy
group by boxid, trunc(to_date(date_column,'yyyy-mm-dd),'Q');
yiyicun 2011-03-02
  • 打赏
  • 举报
回复
ORA-01722: 无效数字 日期是字符串类型

Qu是什么意思?
luoyoumou 2011-03-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yiyicun 的回复:]

引用 4 楼 luoyoumou 的回复:
SQL code
-- 例如:按季度分组:
SELECT BOXID, trunc(date,'Q') as Qu, sum(energy) as energy
FROM boxenergy
group by boxid, trunc(date,'Q');



第一天的什么看不懂 我只需要汇总每星期 每月 每季度 每年的
上面代……
[/Quote]

-- 现在的代码都贴出来啦,你就不会想问题?就不会先去执行我上面的代码?
-- 你的日期字段是什么类型?不会是字符串类型吧?

-- 出错?就不能把出错信息贴出来......?
yiyicun 2011-03-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luoyoumou 的回复:]
SQL code
-- 例如:按季度分组:
SELECT BOXID, trunc(date,'Q') as Qu, sum(energy) as energy
FROM boxenergy
group by boxid, trunc(date,'Q');
[/Quote]


第一天的什么看不懂 我只需要汇总每星期 每月 每季度 每年的
上面代码Qu 是什么来? 我编译了一下 出错
luoyoumou 2011-03-02
  • 打赏
  • 举报
回复
-- 例如:按季度分组:
SELECT BOXID, trunc(date,'Q') as Qu, sum(energy) as energy
FROM boxenergy
group by boxid, trunc(date,'Q');
luoyoumou 2011-03-02
  • 打赏
  • 举报
回复
-- 当前年的第一天:
sys@SZTYORA> select trunc(sysdate,'yyyy') from dual;

TRUNC(SYSDATE,'Q')
-------------------
2011-01-01 00:00:00

-- 当前月的第一天:
select trunc(sysdate,'mm') from dual;

-- 当前周的第一天
sys@SZTYORA> select trunc(sysdate,'DAY') from dual;

TRUNC(SYSDATE,'DAY'
-------------------
2011-02-27 00:00:00
luoyoumou 2011-03-02
  • 打赏
  • 举报
回复
-- 一个季度的第一天:
sys@SZTYORA> select trunc(sysdate,'Q') from dual;

TRUNC(SYSDATE,'Q')
-------------------
2011-01-01 00:00:00

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧