mysql 日期區間建立 按日期範圍統計資料

2021-10-22 04:38:15 字數 3970 閱讀 9610

第一步: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...