mysql - MySQL 查询以查看过去 3 个月内的变化
问题描述
我想看看过去 3 个月的变化。
数据库:
MySQL:
SELECT DATE_FORMAT(CUR.time, '%Y %b') AS thisTime,
MAX(CUR.value) AS thisValue,
MAX(PRE.value) AS prevValue,
MAX(CUR.value)-MAX(PRE.value) AS compValue
FROM test CUR
INNER JOIN test PRE
ON MONTH(PRE.time) = (SELECT MAX(MONTH(XXX.time))
FROM test XXX
WHERE MONTH(XXX.time) < MONTH(CUR.time))
WHERE CUR.time > DATE_SUB(NOW(), INTERVAL 3 MONTH)
GROUP BY MONTH(CUR.time)
ORDER BY CUR.id
结果:
可以看到没有一月!
我想在过去 3 个月中看到这样的变化。有人有想法吗?
| 2019 Feb | 50 | 40 | 10 |
| 2019 Jan | 40 | 25 | 15 |
| 2018 Dec | 25 | 20 | 5 |
解决方案
尝试MONTH
在某个JOIN
条件下使用的问题是在年底从 12 到 1 的环绕。将日期用作YEARMONTH
字符串是最简单的:
SELECT DATE_FORMAT(t1.time, '%b %Y') AS thisTime,
MAX(t1.value) AS thisValue,
MAX(t2.value) AS prevValue,
MAX(t1.value) - MAX(t2.value) AS compValue
FROM test t1
JOIN test t2 ON DATE_FORMAT(t2.time, '%Y%m') = (SELECT MAX(DATE_FORMAT(`time`, '%Y%m'))
FROM test t3
WHERE DATE_FORMAT(t3.time, '%Y%m') < DATE_FORMAT(t1.time, '%Y%m'))
GROUP BY thisTime
ORDER BY STR_TO_DATE(CONCAT('1 ', thisTime), '%d %b %Y') DESC
输出:
thisTime thisValue prevValue compValue
Feb 2019 50 40 10
Jan 2019 40 25 15
Dec 2018 25 20 5
推荐阅读
- html - HTML中的滚动选项?
- javascript - Javascript:薪水计算器(无法显示正确的数字)
- java - 在 GKE 集群中运行的 Java 应用程序如何以编程方式应用 yaml 文件?
- plotly-dash - 如何增加我的容器宽度以容纳更多物品
- amazon-web-services - AWS API GATEWAY 空体转换
- android - 计时器 - 如何使用计时器以特定间隔显示文本?
- javascript - 有没有使用纯 Javascript 读取本地 JSON 或 TEXT 文件的简单方法?
- c# - 使用模型构建器转换返回日期而不是日期时间
- swift - TableView Swift 中的多个 CollectionView
- javascript -