Спасибо за помощь. У меня есть стол, называемый сообщениями, где есть строка для каждого сообщения. Сообщение имеет 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
Может быть, я просто Рединг, что неправильно, но не засчитали возвращает количество уникальных авторов? –
@KyleG. это правильно сейчас. Пожалуйста, проверьте его один раз – PSR
Это имеет смысл, рад, что я не смущаюсь :) Однако теперь вопрос заключается в том, как найти авторов, которые отправили 5 раз (IOW, 5 строк с тем же автором) в течение одного месяца. Я понятия не имею, как это сделать, поэтому мне будет интересно узнать, как это решить. –