2016-10-03 3 views
0

Я хочу, чтобы получить статистику зарегистрированных пользователей в месяц за прошедший год, так что я построил этот запросMySQL расчет даты в ИНЕКЕ

SELECT MONTH(created_at) as m, COUNT(*) as c 
FROM users 
WHERE created_at >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 12 MONTH), '%Y-%m') 
GROUP BY m 

Теперь я понимаю, MySQL будет делать это

  • Выбрать все строки
  • Выполните проверку условий - если поле created_at является GTE для DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 12 MONTH), '%Y-%m') добавления строки к временной таблице, в противном случае это невнимание
  • Группа строк на основе производного столбца m
  • подсчета строк в каждой группе и поместить их в производный столбец c

Если, мол, что я сказал выше, правильно, я обеспокоен точке 2. В типичной программе значение в выражении if будет вычисляться каждый раз, если не вводить переменную.

Должен ли я поставить оператор DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 12 MONTH), '%Y-%m') в переменную и ссылку, что в моем предложении WHERE, чтобы он не перерасчитывал его по каждой строке и как?

+0

Я не уверен, что именно MySQL будет делать здесь. Казалось бы, вы создали строку, содержащую год и месяц, и сравниваете это с полем DATETIME. Если это так, то MySQL, вероятно, преобразует строку month/year в дату и время перед сравнением, которое должно выполнить ОК (при условии индекса на created_at). – Kickstart

ответ

1

Выполняя ваш запрос, первая часть, которая будет рассмотрена, - это статья where. После этого group by и затем Он выберет все эти результирующие строки.

Вы don'y нужно добавить какие-либо дополнительные переменные, которые вы только что говорили о конце