2016-09-04 3 views
1

У меня есть таблица счетов, в которой столбец с именем «dateCreation» является датой создания учетной записи.ежемесячно созданный аккаунт за последние 12 месяцев

Я хотел бы получить все созданные аккаунты за последние 12 месяцев, но иногда нет учетной записи, созданной в течение 2 или более месяцев. В тезисах месяцев я Vould как возвращение тузд 0. Мой запрос отлично работает (я получить его здесь, на StackOverflow):

SELECT customers.dateCreation, Months.id AS `month`, Months.mois, COUNT(customers.dateCreation) AS `count` 
FROM 
(
    SELECT 1 as ID, 'Janvier' as mois UNION SELECT 2 as ID, 'Février' as mois UNION SELECT 3 as ID, 'Mars' as mois UNION SELECT 4 as ID, 'Avril' as mois 
    UNION 
    SELECT 5 as ID, 'Mai' as mois UNION SELECT 6 as ID, 'Juin' as mois UNION SELECT 7 as ID, 'Juillet' as mois UNION SELECT 8 as ID , 'Aout' as mois 
    UNION 
    SELECT 9 as ID, 'Septembre' as mois UNION SELECT 10 as ID, 'Octobre' as mois UNION SELECT 11 as ID, 'Novembre' as mois UNION SELECT 12 as ID, 'Decembre' as mois 
) as Months 
LEFT JOIN customers on Months.id=month(customers.dateCreation) AND dateCreation BETWEEN Date_add(Now(),interval - 12 month) AND NOW() 
GROUP BY Months.id 
ORDER BY Months.id ASC 

Но она возвращает что-то вроде этого:

ID | Count 
    1  |  0 
    2  |  0 
    3  |  0 
    4  |  0 
    5  |  8 
    6  |  1 
    7  |  0 
    8  |  1 
    9  |  0 
    10 |  7 
    11 |  0 
    12 |  4 

Но мы в сентябре , поэтому я хотел бы, чтобы первый месяц октябрь

вот sqlfiddle: http://sqlfiddle.com/#!9/edfeb/1

ответ

3

Измените порядок:

ORDER BY 
    CASE WHEN Months.id > MONTH(NOW()) -- check if the month is after the current 
     THEN 0      -- order by months after the current first 
     ELSE 1      -- and then by the months up to the current 
    END, 
    Months.id ASC 

См fiddle

+0

@ Alexking2005: Добавлено больше объяснений – dnoeth

+0

@ Alexking2005 кажется вполне понятно. С чем вы боретесь? – Strawberry

0

Пожалуйста, попробуйте это, заменив левое соединение:

LEFT JOIN customers ON Months.id=MONTH(customers.dateCreation) 
    AND dateCreation BETWEEN DATE_ADD(CURDATE(),INTERVAL - 12 MONTH) AND CURDATE() 
Смежные вопросы