zoukankan      html  css  js  c++  java
  • 当年/月/日累计指标数据初始化

     1 -- 当年/月/日累计指标数据初始化
     2 with data_day as (
     3     select 'a' name,'2016-07-01' as day, 1  as value union all
     4     select 'a' name,'2017-07-01' as day, 2  as value union all
     5     select 'a' name,'2018-05-01' as day, 3  as value union all
     6     select 'a' name,'2018-06-01' as day, 4  as value union all
     7     select 'a' name,'2018-07-01' as day, 5  as value union all
     8     select 'a' name,'2018-07-02' as day, 6  as value union all
     9     select 'a' name,'2018-07-03' as day, 7  as value union all
    10     select 'a' name,'2018-08-01' as day, 8  as value union all
    11     select 'a' name,'2018-08-03' as day, 9  as value union all
    12     select 'a' name,'2018-09-01' as day, 10 as value union all
    13     select 'a' name,'2018-09-02' as day, 11 as value union all
    14     select 'a' name,'2018-09-03' as day, 12 as value
    15 )
    16 ,cal as (
    17     select '2018-07-01' as day union all
    18     select '2018-07-02' as day union all
    19     select '2018-07-03' as day union all
    20     select '2018-08-01' as day union all
    21     select '2018-08-02' as day union all
    22     select '2018-08-03' as day union all
    23     select '2018-09-02' as day union all
    24     select '2018-09-03' as day
    25 )
    26 select
    27      t2.name
    28     ,t1.day
    29     ,sum(case when t1.day = t2.day                         then value end) as value_d -- 当日数量
    30     ,sum(case when trunc(t1.day,'MM') = trunc(t2.day,'MM') then value end) as value_m -- 当月累计
    31     ,sum(case when trunc(t1.day,'YY') = trunc(t2.day,'YY') then value end) as value_y -- 当年累计
    32     ,sum(value)                                                            as value_t -- 全量累计
    33 from cal t1
    34 join data_day t2
    35     on 1 = 1
    36 where t2.day <= t1.day
    37 group by
    38      t2.name
    39     ,t1.day
    40 order by
    41      t2.name
    42     ,t1.day
    43 ;
    +-------+-------------+----------+----------+----------+----------+--+
    | name  |     day     | value_d  | value_m  | value_y  | value_t  |
    +-------+-------------+----------+----------+----------+----------+--+
    | a     | 2018-07-01  | 5        | 5        | 12       | 15       |
    | a     | 2018-07-02  | 6        | 11       | 18       | 21       |
    | a     | 2018-07-03  | 7        | 18       | 25       | 28       |
    | a     | 2018-08-01  | 8        | 8        | 33       | 36       |
    | a     | 2018-08-02  | NULL     | 8        | 33       | 36       |
    | a     | 2018-08-03  | 9        | 17       | 42       | 45       |
    | a     | 2018-09-02  | 11       | 21       | 63       | 66       |
    | a     | 2018-09-03  | 12       | 33       | 75       | 78       |
    +-------+-------------+----------+----------+----------+----------+--+
    1 select
    2      day
    3     ,sum(value) over(partition by trunc(day,'MM') order by day asc) as value_asc1                                              -- 当月累计
    4     ,sum(value) over(partition by trunc(day,'MM') order by day rows between unbounded preceding and current row) as value_asc2 -- 当月累计
    5 from (
    6     select '2018-08-01' as day ,100 as value union all
    7     select '2018-08-03' as day ,100 as value
    8 ) t
    9 ;
    +-------------+-------------+-------------+--+
    |     day     | value_asc1  | value_asc2  |
    +-------------+-------------+-------------+--+
    | 2018-08-01  | 100         | 100         |
    | 2018-08-03  | 200         | 200         |
    +-------------+-------------+-------------+--+
  • 相关阅读:
    【转】用微软的Live Writer离线写新浪博文
    【转】充满想象力的 Web 调色板
    【转】安装Windows Live Writer后需要做的五件事
    【转】Form Design 设计友善的表单
    【转】从电子政务网络建设迈向政府数据中心建设
    (CF1394 A)Boboniu Chats with Du
    (CF1384B2)Koa and the Beach (Hard Version)
    牛客第十场自闭
    ORACLE 日期加减操作 xiao
    python 占位符
  • 原文地址:https://www.cnblogs.com/chenzechao/p/9553857.html
Copyright © 2011-2022 走看看