기본적으로 로그인할때마다, 날짜가 다르면 로그인 날짜를 확인하는 기초 정보가 있어야 한다.
로그인 타임에 대한 정보가 있는 상태에서 다음과 같이 실행
1 2 3 4 5 6 7 8 9 10 | 1. 테이블 생성 CREATE TABLE `user_month_statistics` ( `idx` INT NOT NULL AUTO_INCREMENT, `month_datetime` DATETIME NOT NULL, `cnt` INT NOT NULL, PRIMARY KEY (`idx`), INDEX `month_datetime` (`month_datetime` ASC)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 2. 프로시저 생성 CREATE DEFINER=`작성자`@`%` PROCEDURE `sys_User_Month_Statistics_Insert`() proc_label:BEGIN declare $last_day date; declare $cnt int; DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN -- default exception handler ROLLBACK; SET @@SQL_SAFE_UPDATES=1; RESIGNAL; END; set $last_day = (SELECT LAST_DAY(DATE_FORMAT(CURDATE(),'%Y-%m-01'))); if(CURDATE() <> $last_day) then leave proc_label; end if; START TRANSACTION; #xx월 01 ~ xx월 말일 23:59:59까지 set $cnt = (SELECT count(*) FROM `테이블` where `logintime` >= DATE_FORMAT(CURDATE(),'%Y-%m-01') and `logintime` < DATE_FORMAT(CURDATE() + INTERVAL 1 MONTH,'%Y-%m-01')); insert into `user_month_statistics` (`month_datetime`, `cnt`) values ($last_day, $cnt); COMMIT; SELECT 0; END | cs |
1 2 3 4 | 3. 이벤트 추가 CREATE DEFINER=`작성자`@`%` EVENT `user_month_statistics` ON SCHEDULE EVERY 1 DAY STARTS '2018-06-20 23:59:00' ON COMPLETION NOT PRESERVE ENABLE DO call sys_User_Month_Statistics_Insert() | cs |
1 2 | 4. 이벤트 확인 show events; | cs |
물론 작성자에 권한으로 해당 스키마에 event 권한을 줘야 한다.
해당 정보를 수정해서, 날 단위로 바꿔서 dau를 뽑아낼 수도 있는데 dau는 필요하지 않아 처리하지 않았다.
'Mysql' 카테고리의 다른 글
mysql sum if 사용 (0) | 2018.10.02 |
---|---|
접속자 통계 (0) | 2018.09.13 |
mysql 스케줄러 사용 (0) | 2018.06.20 |
mysql Delete Trigger 사용 (0) | 2018.05.16 |
mysql root 비밀번호 변경 (0) | 2018.04.16 |