MySQL считать элементы и группировать по дате, игнорировать время - PullRequest
0 голосов
/ 09 марта 2020

У меня есть таблица, в которой хранятся платежные транзакции. Они хранятся с datetime следующим образом:

day-month-year hour:min:sec (Example: 18-11-2019 11:54:41)

Я хочу посчитать, сколько транзакций в день.

Если я использую этот запрос:

SELECT COUNT(id), paid FROM `payments` WHERE paid IS NOT NULL GROUP BY paid

it возвращает мне каждую строку, но я хочу сгруппировать по дате, игнорируя время.

Ответы [ 2 ]

3 голосов
/ 09 марта 2020

Если ваш столбец в фактическом DATETIME, функция DATE должна делать:

SELECT COUNT(id), paid FROM `payments` WHERE paid IS NOT NULL GROUP BY DATE(paid)

Если это VARCHAR или TEXT с пользовательским форматом, как пример, который вы указан (18-11-2019 11:54:41), вам нужно сначала проанализировать его, используя STR_TO_DATE:

SELECT COUNT(id), paid FROM `payments` WHERE paid IS NOT NULL GROUP BY DATE(STR_TO_DATE(paid, '%d-%m-%Y %H:%i:%s'))
2 голосов
/ 09 марта 2020

Для хранения дат всегда следует использовать формат столбца DATETIME, а не VARCHAR. Вы всегда можете решить проблемы с презентацией (например, преобразование в европейский формат) на уровне приложения. Если бы это было так, вы можете просто GROUP BY DATE(paid), то есть

SELECT COUNT(id), paid 
FROM `payments` 
WHERE paid IS NOT NULL 
GROUP BY DATE(paid)

Если ваш столбец равен VARCHAR или TEXT, вам необходимо преобразовать его в значение, по которому вы можете сгруппировать. Если формат DD-MM-YYYY, вы можете просто использовать LEFT(paid, 10) для извлечения части и группы даты, то есть

SELECT COUNT(id), paid 
FROM `payments` 
WHERE paid IS NOT NULL 
GROUP BY LEFT(paid, 10)

Если ваши даты хранятся как D-M-YYYY, вам нужно будет преобразовать их использование STR_TO_DATE например,

SELECT COUNT(id), paid 
FROM `payments` 
WHERE paid IS NOT NULL 
GROUP BY STR_TO_DATE(paid, '%e-%c-%Y')

Обратите внимание, что при преобразовании можно игнорировать временную часть значения, что исключает необходимость использования функции DATE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...