oracle中求mtd,ytd

0
Hi 各位大神,我想在oracle中得到下列结果:
yearmonth, mtd, ytd
201601,    10,  10
201602     10,  20
201701     20,  20
201702     20,  40
......
求支招。
已邀请:
0

seng - 从事BI、大数据、数据分析工作 2017-08-03 回答

如果你有mtd的值, 要算ytd, 可以使用oracle的分析函数
SELECT a.yearmonth, substr(a.yearmonth,1,4),
       mtd,
       --注意ROWS BETWEEN unbounded preceding AND current row  是指第一行至当前行的汇总
       SUM(mtd) OVER(PARTITION BY substr(a.yearmonth,1,4)
                     ORDER BY a.yearmonth
                     ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)   as ytd
  FROM a;

不过我比较喜欢对应表^-^
0

zhuseahui - 让痛苦痛苦 2017-08-03 回答

先出一个mapping表,里面有需要统计的MTD,YTD映射,然后再进行group by。这样写出的SQL比分析函数更好理解。性能也更容易把控。

要回复问题请先登录注册