Как суммировать сумму по идентификатору источника только за текущий месяц с запросом MySQL - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть эта таблица в 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 голосов
/ 19 февраля 2019
SELECT SUM(amount) amountSum FROM Flow WHERE source='1' and DATE_FORMAT(for_date,'%Y-%m') = DATE_FORMAT(CURRENT_DATE(),'%Y-%m')

Какая польза от группы?если вы хотите только текущий месяц?почему вы используете группу?Запустите указанный выше запрос: группа не используется ...

0 голосов
/ 19 февраля 2019

Попробуйте это

     SELECT SUM(amount) FROM Flow WHERE source='1' AND MONTH(for_date) = MONTH(CURRENT_DATE()) AND YEAR(for_date)=YEAR(CURRENT_DATE());
0 голосов
/ 19 февраля 2019

Попробуйте этот запрос

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

Суммирует и группирует по месяцу / году, если ваша база данных растет и имеет несколько лет.

0 голосов
/ 19 февраля 2019

Я бы добавил два параметра даты к запросу следующим образом:

SELECT amount FROM table WHERE for_date>='2019-01-01' AND for_date<='2019-01-31'
0 голосов
/ 19 февраля 2019

Если вы определяете текущий месяц как месяц текущей даты, вам даже не нужно агрегировать здесь:

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;
0 голосов
/ 19 февраля 2019

Отфильтруйте месяц с помощью 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...