Sql Query для подсчета записей той же даты - PullRequest
4 голосов
/ 24 февраля 2012

Все, что я хочу, чтобы посчитать записи на основе даты. (Т.е. записи с одинаковой датой.) Моя таблица

enter image description here Вы можете видеть, что 5-я и 6-я записи имеют одинаковую дату.

Теперь реальная проблема, поскольку я думаю, что одна и та же запись даты имеет разное время, поэтому я не получаю то, что хочу.

Я использую этот sql

SELECT COUNT( created_at ) AS entries, created_at
FROM wp_frm_items
WHERE user_id =1
GROUP BY created_at
LIMIT 0 , 30

То, что я получаю, этоthis.

enter image description here

Я хочу записи как 2 на дату 2012-02-22

Ответы [ 4 ]

12 голосов
/ 24 февраля 2012

Причина, по которой вы получаете то, что вы получаете, в том, что вы также сравниваете время с точностью до секунды. Таким образом, любые записи, созданные в ту же секунду, будут сгруппированы.

Чтобы достичь того, чего вы действительно хотите , вам нужно применить функцию даты к столбцу созданного_атта:

SELECT COUNT(1) AS entries, DATE(created_at) as date
FROM wp_frm_items
WHERE user_id =1
GROUP BY DATE(created_at)
LIMIT 0 , 30

Это удалит часть времени из поля столбца, и, таким образом, сгруппирует все записи, созданные в один и тот же день. Вы можете пойти дальше, удалив часть дня для групповых записей, созданных в том же месяце того же года и т. Д.

Чтобы ограничить запрос записями, созданными в текущем месяце, вы добавляете к запросу WHERE -классу, чтобы выбрать только те записи, которые удовлетворяют этому условию. Вот пример:

SELECT COUNT(1) AS entries, DATE(created_at) as date 
FROM  wp_frm_items
WHERE user_id = 1 
  AND created_at >= DATE_FORMAT(CURDATE(),'%Y-%m-01') 
GROUP BY DATE(created_at)

Примечание : COUNT(1) -часть запроса просто означает Count each row, и вы могли бы также написать COUNT(*), COUNT(id) или любое другое поле. Исторически наиболее эффективным подходом был подсчет первичного ключа, поскольку он всегда доступен в любом индексе, который может использовать механизм запросов. COUNT(*) раньше приходилось выходить из индекса и извлекать соответствующую строку в таблице, что иногда было неэффективно. В более современных планировщиках запросов это , вероятно, уже не . COUNT(1) - еще один вариант, который не заставлял планировщик запросов извлекать строки из таблицы.

Редактировать : Запрос на группировку по месяцам может быть создан различными способами. Вот пример:

SELECT COUNT(1) AS entries, DATE_FORMAT(created_at,'%Y-%c') as month
FROM wp_frm_items
WHERE user_id =1
GROUP BY DATE_FORMAT(created_at,'%Y-%c')
3 голосов
/ 24 февраля 2012

Вы должны исключить время с помощью GROUP BY

SELECT COUNT(*) AS entries, created_at
FROM wp_frm_items
WHERE user_id =1
GROUP BY DATE(created_at)
LIMIT 0 , 30
1 голос
/ 24 февраля 2012

Попробуйте:

SELECT COUNT( created_at ) AS entries, created_at
FROM wp_frm_items
WHERE user_id =1
GROUP BY DATE(created_at)
LIMIT 0 , 30
1 голос
/ 24 февраля 2012

Упс, неправильно прочитал.

Использование GROUP BY DATE(created_at)

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