2013-05-31 3 views
0

Спасибо за помощь. У меня есть стол, называемый сообщениями, где есть строка для каждого сообщения. Сообщение имеет post_date (в формате timestamp unix) и author_id.Оптимизация запросов MySQL со сложным предикатом

Я пытаюсь получить количество уникальных авторов, опубликованных 5 или более раз в течение месяца, сгруппированных по месяцам и годам.

Запрос я сейчас уникальных авторов по месяцам и годам (без фильтра в течение 5 или более должностей в этом месяце) составляет:

select 
    month(from_unixtime(p.post_date)) as month, 
    year(from_unixtime(p.post_date)) as year, 
    count(distinct p.author_id) 
from posts p 
group by month,year 
order by year desc,month desc 

Можете ли вы помочь мне добавить фильтр, который будет рассчитывать только авторы, у которых было 5 или более должностей в этом месяце?

UPDATE

следующие работы запроса, но очень медленно, даже при добавлении предиката для всего этого месяца и года. Может ли кто-нибудь подумать о лучшем способе сделать это?

select 
    month(from_unixtime(p.post_date)) as month, 
    year(from_unixtime(p.post_date)) as year, 
    count(distinct p.author_id) 
from posts p 
    where (
    select count(*) from posts p2 where p2.author_id=p.author_id 
    and month(from_unixtime(p.post_date))=month(from_unixtime(p2.post_date)) 
    and year(from_unixtime(p.post_date))=year(from_unixtime(p2.post_date)) 
    )>=5 
group by month,year order by year desc,month desc 

ответ

1

Вы можете использовать имеющие число> 5 .Это позволит решить проблему

select month(from_unixtime(p.post_date)) as month, 
    year(from_unixtime(p.post_date)) as year, 
    count(p.author_id) c from posts p 
    group by author , month,year having c >5 
    order by year desc,month desc 
+0

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

+0

@KyleG. это правильно сейчас. Пожалуйста, проверьте его один раз – PSR

+0

Это имеет смысл, рад, что я не смущаюсь :) Однако теперь вопрос заключается в том, как найти авторов, которые отправили 5 раз (IOW, 5 строк с тем же автором) в течение одного месяца. Я понятия не имею, как это сделать, поэтому мне будет интересно узнать, как это решить. –

Смежные вопросы