累加计算

img

在mysql中实现如上数据累加效果,可使用 set,定义用户变量。

sql 语句:

SET @x = 0;
SELECT
  t1.months,
  t1.register_num ,
  @x := @x+t1.register_num AS total
FROM
  (
   SELECT
      DATE_FORMAT(createTime, "%Y%m") months,
      count(id) AS register_num
   FROM
      t_user
   GROUP BY
      months asc
  ) t1

案例

create table userlog2
(
    id           int,
    name         varchar(10),
    EmailAddress varchar(50),
    lastlogon    varchar(50)
);
insert into userlog2
values (100, 'test4', 'test4@yahoo.cn', '2007-11-25 16:31:26'),
       (13, 'test1', 'test1@yahoo.cn', '2007-3-22 16:27:07'),
       (19, 'test1', 'test1@yahoo.cn', '2007-10-25 14:13:46'),
       (42, 'test1', 'test1@yahoo.cn', '2007-10-25 14:20:10'),
       (45, 'test2', 'test2@yahoo.cn', '2007-4-25 14:17:39'),
       (49, 'test2', 'test2@yahoo.cn', '2007-5-25 14:22:36');

image-20200825095607069

生成一张临时表,表名自定,四列数据,分别是:Name, Last Logor, Num logontime(要求按时间给出每个人的登录次数,登录时间最早的为1,之后分别为2,3,4等), Num logonday(要求:按天给出每个人的登录次数,同一天多次登录认为是同一次,最早的一次标记为1,之后的依次类推)

DROP TABLE IF EXISTS tmp_table;
CREATE TEMPORARY TABLE tmp_table
select user2.name  as Name,
       user2.time1 as lastlogon,
       user2.rank1 as num_logontime,
       user2.rank2 as num_logonday
from (select *,

             @rank := if(@nam = user1.name, @rank + 1, 1)                                 rank1,
             @rank1 := if(@nam = user1.name, if(@da = user1.day1, @rank1, @rank1 + 1), 1) rank2,
             @nam := user1.name,
             @da := user1.day1

      from (select name,
                   EmailAddress,
                   date_format(lastlogon, '%Y-%m-%d %H:%i:%s')                 as time1,
                   date_format(substring_index(lastlogon, ' ', 1), '%Y-%m-%d') as day1
            from userlog2
            order by name asc, time1 asc
           ) as user1,
           (select @rank := 0
                 , @rank1 := 0
                 , @nam := null
                 , @da := null) temp
      order by user1.name, user1.time1) as user2
;
select *
from tmp_table

image-20200825100000551

Update time: 2020-08-25

results matching ""

    No results matching ""