如何使用MySQL查询仅按当月的源ID对金额求和

时间:2019-02-19 13:58:30

标签: php mysql sum

我在MySQL中有此表

source amount for_date
1        100   2019-01-15
1        200   2019-01-16
1        200   2019-02-16
2        350   2019-02-14

SELECT SUM(amount) amountSum FROM Flow WHERE source='1' GROUP BY month(for_date)

此MySQL查询有效,但我只想获取当前月份,而不是前一个月。

6 个答案:

答案 0 :(得分:0)

使用where条件过滤月份

仅一个月

SELECT SUM(amount) amountSum FROM Flow WHERE source='1' AND month(for_date)=month(now()) GROUP BY month(for_date)

带年份

 SELECT SUM(amount) amountSum FROM Flow WHERE source='1' AND month(for_date)=month(now()) AND year(for_date)=year(now()) GROUP BY month(for_date)

答案 1 :(得分:0)

如果您将当前月份定义为今天的月份,那么您甚至不需要在此处进行汇总:

SELECT SUM(amount) amountSum
FROM Flow
WHERE
    source = '1' AND
    DATE_FORMAT(for_date, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m');

如果您将当前月份定义为表中的最近月份,那么我们可以在当前查询中使用LIMIT

SELECT SUM(amount) amountSum
FROM Flow
WHERE source = '1'
GROUP BY DATE_FORMAT(for_date , '%Y-%m')
ORDER BY DATE_FORMAT(for_date , '%Y-%m') DESC
LIMIT 1;

答案 2 :(得分:0)

我会像这样向查询添加两个日期参数:

SELECT amount FROM table WHERE for_date>='2019-01-01' AND for_date<='2019-01-31'

答案 3 :(得分:0)

尝试此查询

SELECT SUM(amount) amountSum FROM Flow WHERE source='1' GROUP BY DATE_FORMAT(for_date, "%m-%y")

这将按月/年进行汇总和分组,以防您的数据库不断增长并具有多个年份。

答案 4 :(得分:0)

尝试

     SELECT SUM(amount) FROM Flow WHERE source='1' AND MONTH(for_date) = MONTH(CURRENT_DATE()) AND YEAR(for_date)=YEAR(CURRENT_DATE());

答案 5 :(得分:0)

SELECT SUM(amount) amountSum FROM Flow WHERE source='1' and DATE_FORMAT(for_date,'%Y-%m') = DATE_FORMAT(CURRENT_DATE(),'%Y-%m')

group by的用途是什么?如果只想要当月?为什么使用分组依据? 运行上面的查询,没有使用group by ...