总计总和-按年份-按分组

pb3skfrl  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(254)

我有一张如下的table:

col1          Date               Total                                   
 id1           2019-01-19         876         
 id1           2019-02-12         987
 id2           2019-12-12         9879
 id2           2017-07-23         27652
 id2           2018-12-09         765
 id2           2018-12-28         2987
 id1           2016-11-09         2871
 id2           2016-05-19         87687

我想计算一下 sum of Total in latest year - sum of Total in earliest year 启用“分组方式” col1 输出:

col1        output               
      id1       -1008     
      id2       -77808
sqxo8psd

sqxo8psd1#

oracle没有直接的“first()”和“last()”聚合函数。然而,它确实有 keep 用更麻烦的语法做同样的事情。
这允许您按年份和时间汇总数据 col1 . 然后就可以对第一个和最后一个值进行算术运算:

SELECT col1,
       (MAX( sum_total ) KEEP (DENSE_RANK FIRST ORDER BY year DESC) -
        MAX( sum_total ) KEEP (DENSE_RANK FIRST ORDER BY year ASC)
       ) as output
FROM (SELECT col1, TRUNC( dt, 'YYYY') AS year,
             SUM( total ) as sum_total
      FROM   table_name
      GROUP BY col1, TRUNC(dt, 'YYYY')
     ) cy
GROUP BY col1;

这是一把小提琴。

相关问题