О strftime
бизнесе позаботились о в других местах , поэтому нам нужно только разобраться с datetime(...)
здесь и компенсировать date
как отметку времени. И я переключусь на явное условие соединения (а не на неявное условие в предложении WHERE), пока я здесь.
select count(*), count(*), m.date::date - extract(dow from m.date)::int as date
from emails as m join contacts as me on m.fr = me.id
where m.date > '2010-08-25'
and m.date < '2011-08-25'
and me.email like '%gmail.com%'
group by m.date
order by m.date asc
PostgreSQL может сравнивать временные метки со строками даты ISO8601 самостоятельно, поэтому вам не нужно преобразовывать или преобразовывать данные для сравнения.
Эти два count(*)
все еще выглядят немного забавно для меня, но я не знаю контекст, в котором используется запрос, поэтому дубликаты могут иметь смысл.