第一步:mysql使用儲存過程,建立日曆表
建立日曆表:
create table `capacity_common_date` (
`id` int(11) not null auto_increment,
`day_id` varchar(10) default null,
`day_short_desc` varchar(10) default null,
`day_long_desc` varchar(50) default null,
`week_desc` varchar(20) default null,
`week_id` varchar(20) default null,
`week_long_desc` varchar(50) default null,
`month_id` varchar(20) default null,
`month_long_desc` varchar(50) default null,
`quarter_id` varchar(20) default null,
`quarter_long_desc` varchar(20) default null,
`year_id` varchar(20) default null,
`year_long_desc` varchar(50) default null,
primary key (`id`)
) engine=innodb auto_increment=1 default charset=utf8;
構建mysql儲存過程:單次建立一年資料,入參為年份
create definer=`root`@`localhost` procedure `f_m_dim_day`(in yr varchar(20))
begin
declare i int;
declare start_date varchar(20);
declare end_date varchar(20);
declare date_count int;
set i=0;
set start_date= concat(yr, '-01-01');
set end_date = concat(yr+1,'-01-01');
delete from capacity_common_date where year_id = yr;
set date_count = datediff(end_date, start_date);
while i < date_count do
insert into capacity_common_date (day_id,day_short_desc,day_long_desc,week_desc,week_id,week_long_desc,month_id,month_long_desc,quarter_id,quarter_long_desc,year_id,year_long_desc)
select
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%y%m%d') day_id,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%y-%m-%d') day_short_desc,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%y年%m月%d日') day_long_desc,
case dayofweek(str_to_date(start_date,'%y-%m-%d %h:%i:%s')) when 1 then '星期日' when 2 then '星期一' when 3 then '星期二' when 4 then '星期三' when 5 then '星期四' when 6 then '星期五' when 7 then '星期六' end week_desc,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%y%u') week_id,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%y年第%u周') week_long_desc,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%y%m') month_id,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%y年第%m月') month_long_desc,
concat(date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%y'),quarter(str_to_date( start_date,'%y-%m-%d %h:%i:%s'))) quarter_id,
concat(date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%y'),'年第',quarter(str_to_date(start_date,'%y-%m-%d %h:%i:%s')),'季度') quarter_long_desc,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%y') year_id,
date_format(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),'%y年') year_long_desc
from dual;
set i=i+1;
set start_date = date_format(date_add(str_to_date(start_date,'%y-%m-%d %h:%i:%s'),interval 1 day),'%y-%m-%d');
end while;
end建立日期:按條件建立日曆,入參:年份,次數:從yr年起到yr+num年
create definer=`root`@`localhost` procedure `count1`(in yr varchar(20),in num int)
begin
declare i int;
set i=0;
while i <= num do
call f_m_dim_day(yr+i);
set i=i+1;
end while;
end執行語句:從2023年開始建立100年的時間資料
call count1('2019',100);
執行完成之後千萬別忘記刪除自己建立的儲存過程哦~~!???
drop procedure if exists f_m_dim_day;
drop procedure if exists count1;
刪除之後記得查詢下儲存過程或函式:
show procedure status;
到此就完成了全部建立過程,接下來,我們來試試查詢統計吧~!
第二步:連表查詢
使用使用者資料表,其中一列是建立時間,
統計一段時間內每天建立的使用者總數:
select
date_format( a.day_short_desc, '%y-%m-%d' ) t,
count( s.id ) count
from
capacity_common_date a
left join capacity_pub_customer s on date_format( a.day_short_desc, '%y-%m-%d' ) = date_format( s.create_date, '%y-%m-%d' )
where
a.day_short_desc between '2019-01-01'
and '2020-01-01'
group by
t;
mysql按日期查詢資料 mysql按日期查詢資料
問題 mysql按日期查詢乙個月內的資料,查詢返回時結果集中只顯示有資料的結果 需求 查詢結果中假如當天沒有資料,自動填零並輸出 事件描述 sql語句 select date format date added,m.d as day,count product id as total from ht...
mysql 按日期 Mysql 中按日期統計資料
select date format create time,y u weeks,count caseid count from tc case group by weeks select date format create time,y m d days,count caseid count f...
mysql 按日期分組
select date format now y m d days,count caseid count from tc case group by days date format是可以把一些時間格式轉化為你所需的時間格式,now 是2015 09 05 12 33 33,然後變為20150905...