Mysql 计算最近几个月记录中的值
我有一张有客户的桌子,那里的用电量每天晚上都会更新。我想计算每月的用电量Mysql 计算最近几个月记录中的值,mysql,Mysql,我有一张有客户的桌子,那里的用电量每天晚上都会更新。我想计算每月的用电量 SELECT customer, max(power_usage)-min(power_usage) AS lastmonthpower_usage FROM usage WHERE YEAR(date) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(date) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH) GOUP by cust
SELECT customer, max(power_usage)-min(power_usage) AS lastmonthpower_usage FROM usage
WHERE YEAR(date) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(date) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
GOUP by customer
似乎首先要对数据库中每个客户的所有记录进行计算,然后筛选where子句。
我想先过滤日期,然后计算用电量。您可以使用子查询
SELECT customer, max(power_usage)-min(power_usage) AS lastmonthpower_usage
from
(select * from usage
WHERE YEAR(date) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(date) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
)A
GOUP by customer
您的查询看起来很好(没有键入groupby
,也没有转义MySQL的关键字/保留字),应该会给出
但是您也可以在分组方式中使用月份和年份。现在,您应该获得正确的年和月的最小值和最大值,以便在不使用WHERE
的情况下进行计算。相反,您可以添加HAVING
,以过滤上个月(或任何其他月份)的分组结果:
还要确保避免/不要像date
或用法那样使用。如果您想在查询中使用关键字或保留字,则必须使用反勾(`
-从`usage`
中选择*)。欢迎使用SO!当你提出一个问题时,试着增加一个最低限度的内容:输入样本、预期输出样本、你尝试了什么、研究和你在哪里卡住了。你试了什么?你的问题是哪一个?
SELECT YEAR(`date`) AS dYear, MONTH(`date`) AS dMonth, customer, MAX(power_usage) - MIN(power_usage) AS lastmonthpower_usage
FROM `usage`
GROUP BY customer, YEAR(`date`), MONTH(`date`)
HAVING dYear = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND dMonth = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)