Связи думаю понятны из названий.
Нужно, сделать выборку на основе таблицы Reports где date <= @DateEnd and date >= @DateStart сгруппированную по пользователям (user_id) отобразив расчетные значения (количества с условиями, сумму с условиями) некоторых полей таблицы, плюс имя пользователя (с этим я справился). А вот что еще надо и я "буксую". В этой же выборке для каждого пользователя выбрать город где он бывал большее количество раз и вывести название города.
Еще раз акцентирую внимание, что все это в одной выборке и желательно, чтобы работало быстро, потому что записей в рабочей базе будет очень много.
Select вложенный в select я бы пожалуй и сам осилил, но такая конструкция работает не быстро, по моему опыту.