【问题标题】:Group by year and month but only present the month and year actual mysql按年和月分组,但只显示实际 mysql 的月和年
【发布时间】:2016-09-04 18:01:56
【问题描述】:

我有下表。

select * from `consumo`;

输出:

+----+------------+-----------------+---------------------+
| id | cedula     | registroConsumo | fecha-hora          |
+----+------------+-----------------+---------------------+
|  1 | 0931111111 |              20 | 2016-08-17 13:52:48 |
|  2 | 0931111111 |              25 | 2016-08-17 13:53:01 |
|  3 | 0311111111 |              27 | 2016-08-17 13:54:23 |
|  4 | 0311111111 |              10 | 2016-08-17 13:54:26 |
|  5 | 0311111111 |              12 | 2016-08-17 13:54:29 |
|  6 | 0311111111 |              14 | 2016-08-17 13:54:34 |
|  7 | 0311111111 |              19 | 2016-08-17 13:54:38 |
|  8 | 0311111111 |             190 | 2016-08-17 13:54:44 |
|  9 | 0311111111 |             195 | 2016-08-17 13:54:48 |
| 10 | 0912223333 |              19 | 2016-08-17 13:54:54 |
| 11 | 0111111111 |              20 | 2016-08-17 13:54:59 |
| 12 | 0111111111 |              23 | 2016-08-17 13:55:03 |
| 13 | 0111111111 |              27 | 2016-08-17 13:55:07 |
| 14 | 0111111111 |              35 | 2016-08-17 13:55:11 |
| 15 | 0111111111 |              10 | 2016-08-17 13:55:14 |
| 16 | 0111111111 |              35 | 2016-09-04 12:10:01 |
| 17 | 0111111111 |             330 | 2016-09-04 12:10:06 |
+----+------------+-----------------+---------------------+

我想按年和月分组,但只显示月和年的结果,实际都在Mysql中。

我这样做了:

select SUM(`registroConsumo`) from `consumo` 
GROUP BY YEAR(`fecha-hora`),MONTH(`fecha-hora`) 
HAVING YEAR(`fecha-hora`) = SELECT EXTRACT (YEAR FROM (SELECT NOW()))
AND    MONTH(`fecha-hora`) = SELECT EXTRACT (MONTH FROM (SELECT NOW())) ;

我收到此错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便在第 1 行的 SELECT EXTRACT (YEAR FROM (SELECT NOW())) AND MONTH(`fecha-hora`) = SELECT EXTRA 附近使用正确的语法

【问题讨论】:

  • 你的结果是什么?请发布任何错误,以及完整的 MySQL 或 PHP 代码。
  • 为了理智,请不要在表/列标识符中使用“-”。

标签: mysql


【解决方案1】:

having 子句中出现的子查询中缺少几个括号。

但您可以更务实地处理这个问题,并使用order bylimit 返回您获得的最新数据:

select   YEAR(`fecha-hora`),
         MONTH(`fecha-hora`)
         SUM(`registroConsumo`) 
from     `consumo` 
group by YEAR(`fecha-hora`),
         MONTH(`fecha-hora`)
order by YEAR(`fecha-hora`) DESC,
         MONTH(`fecha-hora`) DESC
limit 1

或者,如果它确实必须与当前年份和月份匹配:

select   YEAR(`fecha-hora`),
         MONTH(`fecha-hora`)
         SUM(`registroConsumo`) 
from     `consumo` 
where    YEAR(`fecha-hora`) = YEAR(NOW())
and      MONTH(`fecha-hora`) = MONTH(NOW())
group by YEAR(`fecha-hora`),
         MONTH(`fecha-hora`)

【讨论】:

  • 我得到了这个错误,mysql> SELECT YEAR(fecha-hora), MONTH(fecha-hora), SUM(registroConsumo) FR OM consumo GROUP BY YEAR(fecha-hora),月(fecha-hora) 有年(fecha -hora) = 年(NOW()) 和月(fecha-hora) = 月(NOW());错误 1054 (42S22):“有子句”中的未知列“fecha-hora”
  • 抱歉,我更正了。它应该是where,而不是having。查看更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 2012-12-10
  • 2011-07-21
  • 2021-10-16
  • 1970-01-01
相关资源
最近更新 更多