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)