2014-12-31 3 views
-5

в нижнем запросе возвращает 12 записей, в то время как запрос из предложения (as t) возвращает 18 записей, может ли кто-нибудь помочь в чем проблема в этом запросе?Какая ошибка в моем запросе?

SELECT count(abc.id) as total_this_month,t.* 
FROM email_details abc 
JOIN 
(SELECT count(email_details.id) as total_emails,MAX(`email_details`.email_date) as email_date1, `email_details`.* FROM (`cld_users` join email_details on email_details.fk_user_id = cld_users.id) GROUP BY `email_details`.`email_title` ORDER BY `email_details`.`email_date` DESC) as t 
ON abc.email_title = t.email_title 
where (MONTH(abc.email_date)=MONTH(NOW()) AND YEAR(abc.email_date)=YEAR(NOW())) 
group by t.email_title 
ORDER BY t.`email_date` DESC 
+1

Что ошибка вы получаете, когда запускаете запрос? – SMA

+2

сначала сообщите нам об ошибке –

+0

Мне нужно, чтобы все 18 строк возвращались по запросу в виде предложения –

ответ

1

В запросе необходимо указать

where (MONTH(abc.email_date)=MONTH(NOW()) AND YEAR(abc.email_date)=YEAR(NOW())) 

Но в подзапрос (тот, возвращающегося 18 результатов), у вас есть 6 писем с месяца, который не декабрь 2014. Там нет никакого способа, что те, электронные письма могут быть возвращены запросом, который явно исключает их.

Вы хотите эти электронные письма так, чтобы получить 18 результатов? Удалите условие WHERE за исключением них:

SELECT Count(abc.id) AS total_this_month, 
     t.* 
FROM email_details abc 
     JOIN (SELECT Count(email_details.id)   AS total_emails, 
        Max(`email_details`.email_date) AS email_date1, 
        `email_details`.* 
      FROM (`cld_users` 
        JOIN email_details 
         ON email_details.fk_user_id = cld_users.id) 
      GROUP BY `email_details`.`email_title` 
      ORDER BY `email_details`.`email_date` DESC) AS t 
     ON abc.email_title = t.email_title 
GROUP BY t.email_title 
ORDER BY t.`email_date` DESC 

Начиная оттуда, если вы хотите, чтобы сосчитать письма от текущего месяца, просто заменить:

SELECT Count(abc.id) AS total_this_month, 

с

SELECT SUM(CASE WHEN MONTH(abc.email_date)=MONTH(NOW()) AND YEAR(abc.email_date)=YEAR(NOW()) THEN 1 ELSE 0 END) AS total_this_month, 
+0

Я ставлю where where, чтобы получить счет текущего месяца, если я удалю это, то что мне написать, чтобы получить счет текущего месяца.? –

+0

Это не так, как вы должны это делать –

+1

Я отредактировал свой ответ. –