1createtable user_info_table(id intprimarykey,UserInsertDate date,UpdateDate date,RegistrationCode int);2insertinto user_info_table values3(1,'20190401','20191001',1),4(2,'20190301','20190801',1),5(3,'20190401','20190601',2);6;78dropprocedureifexists proc_test;9delimiter//10createprocedure proc_test()11begin12declare a int;13declare b date;14declare c date;15declare d int;16declare done intdefault0;17declare cur cursorfor18select id,UserInsertDate,UpdateDate,RegistrationCode from user_info_table;19declarecontinuehandlerfor sqlstate '02000'set done =1;20set@sql="";21open cur;22repeat23fetch cur into a,b,c,d;24ifnot done then25set@date=b;26while@date<=c do27if@sql=""then28createtemporarytable tmp(nengetu date,RegistrationCode int);29set@sql="insert into tmp ";30else31set@sql=concat(@sql,"union all ");32endif;33set@sql=concat(@sql,"select '",@date,"',",d," ");34set@date=@date+interval1month;35endwhile;36endif;37 until done endrepeat;38close cur;39PREPARE stmt from@sql;40EXECUTE stmt;41end42//43delimiter;
テスト
SQL
1call proc_test;2select*from tmp;
nengetu
RegistrationCode
2019-04-01
1
2019-05-01
1
2019-06-01
1
2019-07-01
1
2019-08-01
1
2019-09-01
1
2019-10-01
1
2019-03-01
1
2019-04-01
1
2019-05-01
1
2019-06-01
1
2019-07-01
1
2019-08-01
1
2019-04-01
2
2019-05-01
2
2019-06-01
2
集計
SQL
1call proc_test;2select nengetu,RegistrationCode,count(*)as cnt from tmp
3groupby nengetu,RegistrationCode;4
1select d,RegistrationCode,count(*)as cnt from user_info_table as t1
2innerjoin nengetu as t2
3on t2.d between t1.UserInsertDate and t1.UpdateDate
4groupby d,RegistrationCode
5orderby d,RegistrationCode;
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/21 06:21
2019/08/21 06:36
2019/08/21 06:47
2019/08/21 07:01
2019/08/21 07:10 編集
2019/08/21 08:42
2019/08/22 01:30
2019/08/22 04:34
2019/08/28 00:42
2019/08/28 01:09
2019/08/28 01:15
2019/08/28 02:18
2019/08/28 06:00
2019/08/28 06:13
2019/08/28 06:20