Выберите счетчик для каждого дня в месяц

У меня есть база данных sms-трекера с столбцом даты в формате 02/25/2018 04:12:52. Я хочу подсчитать, нет ли sms, отправленных каждый день, чтобы отобразить его на гистограмме. Я мог только сосчитать sms, отправленный пользователем, используя этот запрос «SELECT count (*) как user_count, tableоткуда username = 'CTC01'". Как я могу получить массив count для каждого дня в конкретном месяце

php,mysql,

1

Ответов: 2


2 принят

Поскольку тип OP date_columnявляется VARCHARтипом. Мы используем функцию STR_TO_DATE :

SELECT DATE(STR_TO_DATE(date_column, "%m/%d/%Y %r")), COUNT(*) 
FROM table 
GROUP BY DATE(STR_TO_DATE(date_column, "%m/%d/%Y %r"));

Используйте функцию DATE , чтобы преобразовать выражение даты и времени в дату. Затем используйте, GROUP BYчтобы получить значение COUNT по дате.

В случае, если вы хотите получить данные для конкретного пользователя (например: CTC01 ) и по дате. Вы можете сделать следующее:

SELECT DATE(STR_TO_DATE(date_column, "%m/%d/%Y %r")), COUNT(*) 
FROM table 
WHERE username = 'CTC01' 
GROUP BY DATE(STR_TO_DATE(date_column, "%m/%d/%Y %r"));

1

Я вижу ваш формат даты 'm/d/Y H:i:s'. Таким образом, чтобы получить общее количество за каждый день в месяц, вы должны провести сравнение с наименьшим временем в этом месяце и самым высоким временем в этом месяце. Таким образом, запрос на февраль 2018 года будет следующим:

SELECT DATE(date_column), COUNT(*) 
FROM jobs
where created_on >= '02/01/2018 00:00:00' and created_on < '03/01/2018 00:00:00'
GROUP BY DATE(date_column);

Чтобы получить доступ к определенному пользователю, просто добавьте предложение where к указанному выше запросу так:

SELECT DATE(date_column), COUNT(*) 
FROM jobs
where created_on >= '02/01/2018 00:00:00' and created_on < '03/01/2018 00:00:00' and username = 'CTC01'
GROUP BY DATE(date_column);

EDIT Поскольку ваш столбец даты - varchar, сначала нужно преобразовать его в datetime. Поэтому запустите этот запрос:

SELECT DATE(DATE_FORMAT(STR_TO_DATE(date_column, '%c/%e/%Y %H:%i'), '%Y-%m-%d %H:%m:%s')) as Date, COUNT(*) 
FROM jobs
where created_on >= '02/01/2018 00:00:00' and created_on < '03/01/2018 00:00:00'
GROUP BY DATE(DATE_FORMAT(STR_TO_DATE(date_column, '%c/%e/%Y %H:%i'), '%Y-%m-%d %H:%m:%s'));
PHP, MySQL,
Похожие вопросы