MySQL按时间维度查询价格平均值:实时折线图数据准备
25 浏览量
更新于2024-08-04
收藏 2KB TXT 举报
在MySQL中,处理按不同时间维度查询价格平均值的问题涉及到SQL查询技巧和日期函数的巧妙运用。针对提供的需求,我们有两个主要的任务:一是计算近7天的价格平均值,二是计算近一个月内每隔5天的价格平均值。这些查询将生成用于折线图的数据集,其中x轴表示日期,y轴则表示相应时间段内的价格平均值。
首先,对于近7天的价格平均值,我们使用了递归自连接技术。创建了一个内部查询(`aaa`)来生成一个日期序列,从当前日期往前推7天,每天递减一天。然后,外部查询通过LEFT JOIN与这个日期序列连接,找出每一天的价格。如果某天没有数据,使用IFNULL函数将价格设为0。这样,即使在没有记录的日期,也会显示0作为平均值。
```sql
SELECT IFNULL(bbb.price, 0) AS price, aaa.date
FROM (
SELECT @cdate := DATE_ADD(@cdate, INTERVAL -1 DAY) AS date
FROM (
SELECT @cdate := DATE_ADD(CURDATE(), INTERVAL 1 DAY) FROM price_log LIMIT 7
) a
) aaa
LEFT JOIN (
SELECT AVG(price) AS price, DATE(gmt) AS `date`
FROM price_log
WHERE id = '2022083010451739092484626960-CSY'
AND DATE(gmt) BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE()
GROUP BY DATE(gmt)
) bbb ON bbb.date = aaa.date
```
对于近一个月每隔5天的价格平均值,我们同样采用了递归生成日期序列的方法,但这次是每隔5天。内部查询(`aaa`)生成的是每个月的第一天和倒数第五天的日期,外部查询则计算在这两个日期之间的价格平均值,并同样处理缺失数据。这里的关键是使用DATE_SUB和INTERVAL来计算指定间隔的日期,以及CEILING函数来确保每个组的天数是5的倍数。
```sql
SELECT IFNULL(bbb.avg_price, 0) AS avg_price, aaa.gmt
FROM (
SELECT @cdate := DATE_ADD(@cdate, INTERVAL -5 DAY) AS gmt
FROM (
SELECT @cdate := DATE_ADD(CURDATE(), INTERVAL 5 DAY) FROM price_log LIMIT 6
) a
) aaa
LEFT JOIN (
SELECT DATE_SUB(CURDATE(), INTERVAL interval_5_day * 5 DAY) AS gmt, AVG(price) AS avg_price, COUNT(price) AS c, SUM(price) AS s
FROM (
SELECT CEILING(DATEDIFF(CURDATE(), gmt) / 5) AS interval_5_day, AVG(price) AS avg_price, COUNT(price) AS c, SUM(price) AS s
FROM price_log
WHERE id = '2022083010451739092484626960-CSY'
AND gmt BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
GROUP BY CEILING(DATEDIFF(CURDATE(), gmt) / 5)
) subquery
GROUP BY gmt
) bbb ON bbb.gmt = aaa.gmt
```
这两个查询的结果集合将为折线图提供所需的日期和对应的价格平均值,可以方便地展示价格随时间的变化趋势。通过组合这两个查询,用户可以根据需求快速生成所需的时间序列分析报告。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2024-04-17 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
a5252lala
- 粉丝: 13
- 资源: 12
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器