Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 只有datetime字段时,如何按月份和年份分组?_Php_Mysql_Sql - Fatal编程技术网

Php 只有datetime字段时,如何按月份和年份分组?

Php 只有datetime字段时,如何按月份和年份分组?,php,mysql,sql,Php,Mysql,Sql,我有一个表模式,它本质上是一组带有datetime字段的事务信息 TRANSACTION (< transactionid >, amount, when) 交易(,金额,时间) 我需要生成每月的交易总数,即SUM(amount),但我被分组依据的内容难倒了。SQL中的每一行都应该包含每月的总数(因此,09年1月、09年2月、2010年1月等各有一行)。我想我可能必须通过代码生成表,但我想知道是否有办法使用SQL解决这个问题 任何帮助都将不胜感激!(使用MySQL 5.3,PHP

我有一个表模式,它本质上是一组带有datetime字段的事务信息

TRANSACTION (< transactionid >, amount, when)
交易(,金额,时间)
我需要生成每月的交易总数,即SUM(amount),但我被分组依据的内容难倒了。SQL中的每一行都应该包含每月的总数(因此,09年1月、09年2月、2010年1月等各有一行)。我想我可能必须通过代码生成表,但我想知道是否有办法使用SQL解决这个问题

任何帮助都将不胜感激!(使用MySQL 5.3,PHP5)

我一直使用MONTH()和YEAR()…这对我来说似乎有点像黑客,但它很有效

SELECT SUM(amount) FROM yourTable GROUP BY MONTH(date), YEAR(date)
还是反过来呢?思考


鲍比

我想试试这样的东西:

SELECT
  YEAR(when) AS year,
  MONTH(when) AS month,
  SUM(amount) AS amount
FROM
  TRANSACTION
GROUP BY
  YEAR(when),
  MONTH(when)
ORDER BY
  YEAR(when),
  MONTH(when)

这适用于MS SQL,也适用于MySQL。

您需要按提取进行分组

SELECT 
    SUM(amount)
FROM 
    transaction
GROUP BY 
    EXTRACT(MONTH FROM when),
    EXTRACT(YEAR FROM when)
如果您需要这些列,那么

SELECT
    EXTRACT(MONTH FROM when) as month, 
    EXTRACT(YEAR FROM when) as year, 
    SUM(amount)
FROM 
    transaction
GROUP BY 
    month,
    year
当然,您可以按追加
订单,也可以使用短名称:

SELECT 
    EXTRACT(MONTH FROM when) as month, 
    EXTRACT(YEAR FROM when) as year, 
    SUM(amount)
FROM 
    transaction
GROUP BY 
    month, 
    year
ORDER BY 
    year DESC, 
    month DESC
我想你想要:

SELECT SUM(amount)
FROM yourTable
GROUP BY CONCAT(YEAR(date), '-', MONTH(date))

请注意,对于新手,
是表列名而不是MySQL函数时。
SELECT SUM(amount)
FROM yourTable
GROUP BY CONCAT(YEAR(date), '-', MONTH(date))