oracle查询前十二个月的记录

JamesGan96 2017-09-19 04:51:27
有如下一张表:
表 A :
(int) (int)
sale year month 每个月都有大量数据,我需要的是每个月的平均销量 sale
100 2017 9
102 2017 9
104 2017 9

210 2017 8
220 2017 8
230 2017 8
.... .... .....

277 2016 1

我现在想要得到距这个月 前十二个月的平均数据:
(int) (int)
sale year month
102 2017 9
220 2017 8
.... .... .....
277 2016 9
求大佬指点!

...全文
2984 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
碧水幽幽泉 2017-09-19
  • 打赏
  • 举报
回复
SELECT AVG(SAL),TO_CHAR(YEAR)||LPAD(MONTH,2,0)
FROM A 
WHERE TO_CHAR(YEAR)||LPAD(MONTH,2,0)>=TO_CHAR(ADD_MONTH(SYSDATE,12),'YYYYMM')
GROUP BY TO_CHAR(YEAR)||LPAD(MONTH,2,0);
碧水幽幽泉 2017-09-19
  • 打赏
  • 举报
回复
SELECT AVG(SAL),TO_CHAR(YEAR)||LPAD(MONTH,2,0)
FROM A 
WHERE TO_CHAR(YEAR)||LPAD(MONTH,2,0)>=TO_CHAR(ADD_MONTH(SYSDATE,12),'YYYYMM') 
GROUP BY TO_CHAR(YEAR)||LPAD(MONTH,2,0);
碧水幽幽泉 2017-09-19
  • 打赏
  • 举报
回复
SELECT AVG(SAL),TO_CHAR(YEAR)||LPAD(MONTH,2,0)
FROM A 
WHERE TO_CHAR(YEAR)||LPAD(MONTH,2,0)>=TO_CHAR(ADD_MONTH(SYSDATE,12),'YYYYMM') 
GROUP BY TO_CHAR(YEAR)||LPAD(MONTH,2,0);
JamesGan96 2017-09-19
  • 打赏
  • 举报
回复
引用 3 楼 qq_32583275 的回复:
select avg(sale),year,month from ( select * from A where (year = (select max(year) from A)) or (year = ((select max(year) from A)-1) and month > (select max(month) from A where year = (select max(year) from A))) ) group by(year,month) 这个应该没问题,我测试了,说一下一般时间是保存在一个字段中的,不应该分开保存 , 比如时间20170919 就是2017-09-19
谢谢,这个也可以,表设计的不好。
JamesGan96 2017-09-19
  • 打赏
  • 举报
回复
引用 2 楼 weixin_38847048 的回复:
SELECT AVG(sal),to_char(YEAR)||lpad(MONTH,2,0) FROM a WHERE to_char(YEAR)||lpad(MONTH,2,0)>=to_char(SYSDATE-INTERVAL '12' MONTH,'yyyymm') GROUP BY to_char(YEAR)||lpad(MONTH,2,0); --试试这个吧 现在付出查询代价大的原因就是表结构设计不当
谢谢,这个可以的!表设计确实有问题!
丨大浣熊丨 2017-09-19
  • 打赏
  • 举报
回复
select avg(sale),year,month from ( select * from A where (year = (select max(year) from A)) or (year = ((select max(year) from A)-1) and month > (select max(month) from A where year = (select max(year) from A))) ) group by(year,month) 这个应该没问题,我测试了,说一下一般时间是保存在一个字段中的,不应该分开保存 , 比如时间20170919 就是2017-09-19
花开了叫我 2017-09-19
  • 打赏
  • 举报
回复
SELECT AVG(sal),to_char(YEAR)||lpad(MONTH,2,0) FROM a WHERE to_char(YEAR)||lpad(MONTH,2,0)>=to_char(SYSDATE-INTERVAL '12' MONTH,'yyyymm') GROUP BY to_char(YEAR)||lpad(MONTH,2,0); --试试这个吧 现在付出查询代价大的原因就是表结构设计不当
侠侠_xiaxia 2017-09-19
  • 打赏
  • 举报
回复
select avg(sale) from table1 group by year, month

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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