统计一年每月/本周每天的数据
MySQL5.7
目前有两个思路:
- 穷举本周每天的日期,left join 数据表
- 指定统计的时间范围、按照时间间隔进行统计(类似ES桶聚合date_histogram)
思路一(UNION)实现
SELECT
IFNULL(AVG(c.res_value),0) avg
FROM
(
SELECT
a.thisweek,b.res_value
FROM
(
SELECT DATE_SUB(CURDATE(),INTERVAL WEEKDAY(CURDATE()) + 0 DAY) AS thisweek
UNION
SELECT DATE_SUB(CURDATE(),INTERVAL WEEKDAY(curdate()) - 1 DAY)
UNION
SELECT DATE_SUB(CURDATE(),INTERVAL WEEKDAY(curdate()) - 2 DAY)
UNION
SELECT DATE_SUB(CURDATE(),INTERVAL WEEKDAY(curdate()) - 3 DAY)
UNION
SELECT DATE_SUB(CURDATE(),INTERVAL WEEKDAY(curdate()) - 4 DAY)
UNION
SELECT DATE_SUB(CURDATE(),INTERVAL WEEKDAY(curdate()) - 5 DAY)
UNION
SELECT DATE_SUB(CURDATE(),INTERVAL WEEKDAY(curdate()) - 6 DAY)
) a
LEFT JOIN (SELECT res_value, update_date FROM xxx) b ON a.thisweek = DATE_FORMAT(b.update_date,'%Y-%m-%d')
) c
GROUP BY c.thisweek
/* 结果如下:
avg thisweek
0 2022-09-26
7.5 2022-09-27
0 2022-09-28
0 2022-09-29
0 2022-09-30
0 2022-10-01
0 2022-10-02
*/
思路一(用户变量)实现本周日期
SELECT
DATE_SUB(CURDATE(),INTERVAL WEEKDAY(CURDATE()) - @s:=@s+1 DAY) `thisweek`
FROM
mysql.help_topic,
(SELECT @s := -1) a
WHERE
@s < 6
ORDER BY
`thisweek`
拓展:近7天日期
# 不包括当天
SELECT
DATE_SUB(CURDATE(),INTERVAL WEEKDAY(CURDATE()) + @s:=@s+1 DAY) `date`
FROM
mysql.help_topic,
(SELECT @s := 0) a
WHERE
@s < 7
ORDER BY
`date`
拓展:统计当年每月的数据
SELECT
a.`date`,
IFNULL(b.num,0) num
FROM
(
# 今年每月月份
SELECT
CONCAT(YEAR(CURDATE()),"-",LPAD(@s:=@s+1,2,"0"))`date`
FROM
mysql.help_topic,
(SELECT @s := 0) a
WHERE
@s < 12
ORDER BY
`date`
) a LEFT JOIN
(
SELECT
DATE_FORMAT(F_CREATORTIME,'%Y-%m') AS releaseYearMonth,
COUNT(F_Id) num
FROM
wyexam_train_qu_answer
WHERE F_UserId = "349057407209541"
GROUP BY releaseYearMonth
) b ON a.`date` = releaseYearMonth
参考链接:
https://blog.csdn.net/zjh19961213/article/details/105240167
https://blog.csdn.net/csdnlaiyanqi/article/details/121407363
作者:daydreamer-fs
出处:https://www.cnblogs.com/daydreamer-fs/p/16739784.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律