Проблема в том, что вы группируете набор полей, отличающийся от выбранного. Этот запрос просто сработал случайно. Я имею в виду, вы группировали по WEEKOFYEAR и выбирали значение времени. Что фактически делает группировка, так это «удаляет» детали и создает группу, в которой они применяют функцию (в данном случае это количество).
Теперь вы пытаетесь показать детали при группировании одновременно, и это приводит к неправильному запросу. Например, это будет работать, но не покажет вам детали:
SELECT dept, WEEKOFYEAR(DATE(FROM_UNIXTIME(time))) as aWeek, COUNT(*) AS freq
FROM prefix_table1 a
INNER JOIN prefix_table2 b b ON a.author = b.username
GROUP BY dept, aWeek
ORDER BY aWeek
LIMIT 24
Яркий пример неправильной логики вашего исходного запроса: если вы сгруппировали, скажем, 20 записей (на счетчике будет отображаться 20) ... какое время вы бы отобразили для ВСЕХ из них, если вы можете отображать только 1 из этих записей?
Edit:
Как сказал @ypercube, предыдущий запрос может не работать в зависимости от того, заставляете ли вы сервер соблюдать стандарты ANSI или нет. Если это так, то вы можете попробовать выполнить следующий (и немного недружественный) запрос:
SELECT dept, WEEKOFYEAR(DATE(FROM_UNIXTIME(time))) as aWeek, COUNT(*) AS freq
FROM prefix_table1 a
INNER JOIN prefix_table2 b b ON a.author = b.username
GROUP BY dept, WEEKOFYEAR(DATE(FROM_UNIXTIME(time)))
ORDER BY aWeek
LIMIT 24