Php 如何使用MySQL查询仅对当月按来源ID进行金额合计
我在MySQL中有这个表Php 如何使用MySQL查询仅对当月按来源ID进行金额合计,php,mysql,sum,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查询工作正常,但我只想获取当前月份,而不
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查询工作正常,但我只想获取当前月份,而不是前一个月。使用
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)
如果将当前月份定义为今天日期的月份,则您甚至不需要在此处进行汇总:
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;
我将向查询中添加两个日期参数,如下所示:
SELECT amount FROM table WHERE for_date>='2019-01-01' AND for_date<='2019-01-31'
从表格中选择金额,其中for_date>='2019-01-01'和for_date尝试此查询
SELECT SUM(amount) amountSum FROM Flow WHERE source='1' GROUP BY DATE_FORMAT(for_date, "%m-%y")
这将按月/年进行汇总和分组,以防您的数据库增长并有多个年份。试试这个
SELECT SUM(amount) FROM Flow WHERE source='1' AND MONTH(for_date) = MONTH(CURRENT_DATE()) AND YEAR(for_date)=YEAR(CURRENT_DATE());
group by有什么用?如果您只想要当前月份?你为什么使用分组方式?
运行上面的查询不使用group by…OP从2019年2月开始向表中添加新数据时会发生什么情况?这可以写入索引吗?很遗憾,我不知道。此查询将给出当前月份。。。但它会把所有的月份和年份都分组……这里分组有什么用呢?这项工作对我来说太完美了。我在php函数中使用。谢谢。@prasanth在这种情况下告诉我,对于当前月份,请从Flow GROUP按月选择sumDel(对于u日期)@prasanth这里我只想对当前月份进行求和。从Flow GROUP BY month(对于_date)@Martin use with where conditionmonth(对于_date)=month(now())和year(对于_date)=year(now())
,依次选择SUM(当source='21'时为CASE,当source='22'时为amount,则为amount,否则为0 END)sumDel
SELECT SUM(amount) amountSum FROM Flow WHERE source='1' and DATE_FORMAT(for_date,'%Y-%m') = DATE_FORMAT(CURRENT_DATE(),'%Y-%m')