0
点赞
收藏
分享

微信扫一扫

MYSQL根据时间统计,没有的时间补上并补0

笙烛 2022-10-30 阅读 43


项目中有些曲线图,需要统计月份每天的,或者年份每个月的条件数量

列如:

MYSQL根据时间统计,没有的时间补上并补0_sql

如下图mysql的表safety_camera_event有八条数据

MYSQL根据时间统计,没有的时间补上并补0_数据库_02

1. 直接分组是得不到全部日期的,只能分组到有的日期数据

SELECT DATE_FORMAT(sce.event_date,'%Y-%m-%d') as date ,count(1) from safety_camera_event sce GROUP BY DATE_FORMAT(sce.event_date,'%Y-%m-%d')

结果:

MYSQL根据时间统计,没有的时间补上并补0_mysql_03

2.我们想得到连续日期,并补0的数据需要这样来写

日的数据

SELECT t1.date_str, COALESCE(t2.date_total_count, 0) as date_total_count
FROM(
SELECT @cdate:= date_add(@cdate, interval - 1 day) as date_str FROM(SELECT @cdate:= date_add('2022-10-15', interval + 1 day) from security_role_resource) tmp1 WHERE @cdate > '2022-10-01'
) t1
LEFT JOIN(
SELECT DATE_FORMAT(sce.event_date, '%Y-%m-%d') as date_str, count(1) as date_total_count FROM safety_camera_event as sce WHERE sce.valid =1 AND
YEAR(sce.event_date) = YEAR(now())
AND
MONTH(sce.event_date) = MONTH(now()) GROUP BY DATE_FORMAT(sce.event_date, '%Y-%m-%d')
) t2
on t1.date_str = t2.date_str
ORDER BY t1.date_str ASC

结果:

MYSQL根据时间统计,没有的时间补上并补0_mysql_04

同理月的数据:

SELECT t1.date_str, COALESCE(t2.date_total_count, 0) as date_total_count
FROM(
SELECT DATE_FORMAT(@cdate:= (date_add(@cdate, interval - 1 month)),'%Y-%m') as date_str FROM(SELECT @cdate:= date_add('2022-10-01', interval + 1 month) from security_role_resource) tmp1 WHERE @cdate > '2022-01-01'
) t1
LEFT JOIN(
SELECT DATE_FORMAT(sce.event_date, '%Y-%m') as date_str, count(1) as date_total_count FROM safety_camera_event as sce WHERE sce.valid =1 AND
YEAR(sce.event_date) = YEAR(now())
GROUP BY DATE_FORMAT(sce.event_date, '%Y-%m')
) t2
on t1.date_str = t2.date_str
ORDER BY t1.date_str ASC

结果:

MYSQL根据时间统计,没有的时间补上并补0_数据库_05

举报

相关推荐

0 条评论