统计一段时间内,每天的信息发布数、已审核、未审核

第一步:手动产生一个连续的日期

CREATE TABLE dateTemp (i int);  
INSERT INTO dateTemp (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);  


select adddate('2012-09-01', numlist.id) as `date` from 
 (SELECT n1.i + n10.i*10 + n100.i*100 AS id FROM dateTemp n1 cross join dateTemp as n10 cross join dateTemp as n100) as numlist 
where adddate('2012-09-01', numlist.id) <= '2012-09-10'; 


第二步:产生一个连续的日期:起始时间发布第一条信息的时间,终止时间:这里选取当前时间

select adddate(( SELECT DATE_FORMAT(bi.release_time, '%Y-%m-%d') as publish_date 
FROM bbg_information as bi where bi.release_time > 0  
GROUP BY DATE_FORMAT( bi.release_time, '%Y-%m-%d' )  
limit 1), numlist.id) as `date` from (SELECT n1.i + n10.i*10 + n100.i*100+n1000.i*1000 AS id FROM dateTemp n1 cross join dateTemp as n10 cross join dateTemp as n100 cross join dateTemp as n1000) as numlist where adddate(( SELECT DATE_FORMAT( bi.release_time, '%Y-%m-%d') as publish_date  
FROM bbg_information as bi  
GROUP BY DATE_FORMAT( bi.release_time, '%Y-%m-%d' )  
limit 1), numlist.id) <= curdate()


第三步:将结果存入表格,以便联合查询
(1)先要删除原来的表,为了不重复添加数据

drop table if exists information_line_date;  
(2)在建表时指定数据类型和字符集,不然会出错。

CREATE TABLE  if not exists information_line_date (create_time date);  

(3)添加时间数据

insert into information_line_date2 (create_time) select * from (  
select adddate(( SELECT DATE_FORMAT( bi.release_time, '%Y-%m-%d') as publish_date    
FROM bbg_information as bi where  bi.release_time > 0  
GROUP BY DATE_FORMAT( bi.release_time, '%Y-%m-%d' )  
limit 1), numlist.id) as `date` from (SELECT n1.i + n10.i*10 + n100.i*100+n1000.i*1000 AS id FROM dateTemp n1 cross join dateTemp as n10 cross join dateTemp as n100 cross join dateTemp as n1000) as numlist where adddate(( SELECT DATE_FORMAT(bi.release_time , '%Y-%m-%d') as publish_date  
FROM bbg_information as bi   
GROUP BY DATE_FORMAT( bi.release_time, '%Y-%m-%d' )  
limit 1), numlist.id) <= '2070-12-30'  
) as t

第四步:第三步:联合查询,无数据补0

SELECT information_line_date2.create_time as publish_date, IF(information_num IS NULL , 0, information_num) as information_num,
IF(reviewed IS NULL , 0, reviewed) as reviewed,
IF(reviewing IS NULL , 0, reviewing) as reviewing
FROM(SELECT DATE_FORMAT( bi.release_time, '%Y-%m-%d') as publish_date , COUNT(*) as information_num , sum(bi.state=1) as reviewed ,
sum(bi.state=0) as reviewing 
FROM bbg_information as bi   
GROUP BY DATE_FORMAT( bi.release_time, '%Y-%m-%d' )) t
RIGHT JOIN information_line_date2 on t.publish_date = information_line_date2.create_time
where information_line_date2.create_time BETWEEN '2017-10-20' and '2017-12-01'
ORDER BY information_line_date2.create_time DESC
LIMIT 5,5


到这里就差不多结束了,可以查询一段时间内每天的信息发布数,审核数总数,未审核总数。

猜你喜欢

转载自blog.csdn.net/qq_36826248/article/details/79130671
今日推荐