mysql 累计值计算

由于mysql没有很好的支持分析函数,现在以SUM分析函数为例,做一下mysql的按日累计值计算

mysql 累计计算
select DateID TRAN_DT,
       REGI_CH REGI_CH,
       TRAN_CH TRAN_CH,
       IFNULL(DRAW_CT, 0) DRAW_CT,
       round(IFNULL(DRAW_AMT, 0),2) DRAW_AMT,
       ALL_DRAW_CT,
       round(ALL_DRAW_AMT, 2) ALL_DRAW_AMT
  from (select d.DateID,
               d.REGI_CH REGI_CH,
               d.TRAN_CH TRAN_CH,
               DRAW_CT,
               DRAW_AMT,
               @rownum := @rownum + 1,
               IF(@REGI_CH = d.REGI_CH and @TRAN_CH = d.TRAN_CH,
                  @ALL_DRAW_CT := @ALL_DRAW_CT + ifnull(b.DRAW_CT, 0),
                  @ALL_DRAW_CT := b.DRAW_CT) AS ALL_DRAW_CT,
               IF(@REGI_CH = d.REGI_CH and @TRAN_CH = d.TRAN_CH,
                  @ALL_DRAW_AMT := @ALL_DRAW_AMT + ifnull(b.DRAW_AMT, 0),
                  @ALL_DRAW_AMT := b.DRAW_AMT) AS ALL_DRAW_AMT,
               IF(@REGI_CH = d.REGI_CH and @TRAN_CH = d.TRAN_CH,
                  @rank := @rank + 1,
                  @rank := 1) AS rank,
               @REGI_CH := d.REGI_CH,
               @TRAN_CH := d.TRAN_CH
          FROM (select dateid, REGI_CH, TRAN_CH
                  from (select d.dateid, REGI_CH, TRAN_CH, TRAN_DT
                          from (select TRAN_DT,
                                       REGI_CH,
                                       TRAN_CH,
                                       IF(@REGI_CH = b.REGI_CH and
                                          @TRAN_CH = b.TRAN_CH,
                                          @rank := @rank + 1,
                                          @rank := 1) AS rank,
                                       @REGI_CH := b.REGI_CH,
                                       @TRAN_CH := b.TRAN_CH
                                  FROM (select TRANDT    TRAN_DT,
                                               u.REGI_CH,
                                               TRANCH    TRAN_CH
                                          from ods_bd_withdraw t
                                          join ods_bd_user_person u
                                            on u.member_cd = t.member_cd
                                         where trandt > ‘20150515‘
                                           and trandt < ‘${trandate}‘
                                         group by trandt, u.REGI_CH, TRANCH
                                         order by u.REGI_CH, TRANCH, trandt) b,
                                       (SELECT @REGI_CH := NULL,
                                               @TRAN_CH := null,
                                               @rank    := 0) c
                                having rank = 1) n
                          join dim_date d
                            on 1 = 1
                         where d.dateid > ‘20150515‘
                           and d.dateid < ‘${trandate}‘ ) f
                 where f.TRAN_DT <= dateid
                 order by REGI_CH, TRAN_CH, dateid) d
          left join (select TRANDT TRAN_DT,
                           u.REGI_CH,
                           TRANCH TRAN_CH,
                           count(*) DRAW_CT,
                           sum(TRANAM) DRAW_AMT
                      from ods_bd_withdraw t
                      join ods_bd_user_person u
                        on u.member_cd = t.member_cd
                     where trandt > ‘20150515‘
                       and trandt < ‘${trandate}‘
                     group by trandt, u.REGI_CH, TRANCH
                     order by u.REGI_CH, TRANCH, trandt) b
            on b.TRAN_DT = d.DateID
           and d.REGI_CH = b.REGI_CH
           and d.TRAN_CH = b.TRAN_CH
          join (SELECT @rownum       := 0,
                      @REGI_CH      := NULL,
                      @TRAN_CH      := null,
                      @ALL_DRAW_CT  := 0,
                      @ALL_DRAW_AMT := 0,
                      @rank         := 0) c
            on 1 = 1
         order by dateid) t
时间: 2025-01-12 19:58:38

mysql 累计值计算的相关文章

MYSQL使用内存计算

MySQL内存占用计算: global buffer+all thread buffer global buffer= innodb_buffer_pool_size 缓存表数据和索引数据,加速查询,并且使查询结果集保存在内以供重用,一般设置到主机内存的70%以下 +innodb_additional_mem_pool_size 存放数据字典信息以及一些内部数据结构,如果数据库的对象过多的话,该值可能需要调整,一般不做调整 +innodb_log_buffer_size 事务日志所使用的缓冲区,

mysql 根据当前计算历史时间

TIME_TO_SEC(TIMEDIFF(NOW(),FROM_UNIXTIME(时间字段))) / 86400 计算天,时间字段类型是unix时间戳 1.TIME_TO_SEC(time) 返回已转化为秒的time参数. 2.TIMEDIFF(expr,expr2) 返回起始时间 expr 和结束时间expr2 之间的时间. expr 和expr2 为时间或 date-and-time 表达式,两个的类型必须一样. 3.NOW() 返回当前日期和时间值,其格式为 'YYYY-MM-DD HH:

分期值、累计值的相互转换

-- 分期值到累计值代码示例1with temp00 as (select '2020-01-01' date1,1 num1union all select '2020-01-02' adate1,2 num1 union all select '2020-01-03' date1,3 num1union all select '2020-01-04' date1,4 num1 ) select t1.date1 new_date,sum(t2.num1) new_numfrom temp00

Mysql 根据出生日期计算年龄

最近因为业务要求需要根据出生日期计算年龄,在网上查了好多的方法,在这里总结一下. 网上的计算方法好多都提到了格里高利历法,特意去查了下资料,普及点知识. 格里高利历是公历的标准名称,是一种源自于西方社会的历法.它先由意大利医生.天文学家.哲学家.年代学家阿洛伊修斯·里利乌斯(Aloysius Lilius,约1519-1576) 与克拉乌(Christophorus Clavius)等学者在儒略历的基础上加以改革,后由教皇格里高利十三世于1582年颁布.而公元即"公历纪元",又称&qu

在MySQL查询中计算一个人的年龄——续

DATE_ADD来救援 MySQL知道如何使用Gregorian日历,我相信让MySQL更容易完成工作,而不是试图弄清楚如何实现不同的情况.我选择实施"月末最后一天"技术.在这种情况下,我们将通过创建基于当年3月1日的mysql日期,并从中减去一天来到达2月的最后一天. 如果您使用mysql日期函数阅读我的文章"查找下一个星期一",您会看到如何使用DATE_ADD()来帮助解决许多问题,即使在您实际使用它减去时该名称可能会产生误导.使用以下测试日期证明mysql已经

MySQL学习_计算用户支付方式占比_20161104

计算用户支付方式占比 SELECT b.*#根据城市ID 年月排序 FROM ( SELECT a.* FROM ( #纵向合并 SELECT b1.ID,a1.城市,a1.收款方式,DATE_FORMAT(a1.确认时间,"%Y%m") AS 年月,SUM(a1.金额) AS 收款方式金额 FROM `a029_collectionment` AS a1 LEFT JOIN `a000_city` AS b1 ON a1.城市=b1.城市 WHERE a1.确认时间>"

PHP,Mysql根据经纬度计算距离并排序

网上给出的计算公式是这样的: Lng1表示A点纬度和经度,Lat2 Lng2 表示B点纬度和经度 a = Lat1 – Lat2为两点纬度之差 b = Lng1 -Lng2 为两点经度之差 6378.137为地球半径,单位为公里 计算出来的结果单位为公里 select *,(2 * 6378.137* ASIN(SQRT(POW(SIN(PI()*(111.86141967773438-lng)/360),2)+COS(PI()*33.07078170776367/180)* COS(lat *

mysql中时间计算函数SQL DATE_SUB()用法

本文为博主原创,未经允许不得转载: 在写sql的时候,经常要在sql中传值时间,对时间进行计算并过滤.之前都是将时间在后台计算好,直接传值给sql, 今天发现,有一个更方便的sql函数,可以简化很多代码.这个函数就是 DATE_SUB(). DATE_SUB 将从一个日期/时间值中减去一个时间值(时间间隔). 其函数中用法表达式为:DATE_SUB(date,INTERVAL expr type), type的参数可以为一下类型: MICROSECOND SECOND MINUTE HOUR D

oracle当前月添加一列显示前几个月的累计值

create table test_leiji(rpt_month_id number(8),                        current_month NUMBER(12,2)); insert into test_leiji (RPT_MONTH_ID, CURRENT_MONTH) values (200901, 380128.344363);insert into test_leiji (RPT_MONTH_ID, CURRENT_MONTH) values (20090