Kto może generować te raporty? Czy może zdarzyć się że raport ulegnie zmianie w trakcie przeliczania? W sensie o godzinie 12-ej zapuszczasz tworzenie raportu, a o 13 ktoś inny lub Ty znowu generuje raport (poprzedni przestaje być generowany).
Tak czy siak jeśli raporty są jednodniowe - to polecam dodać w cronie odpalanie skryptu np w nocy, który wygenerowałby Ci taki raport, zapisał wynik do jakiejś innej tabeli lub do pliku (format raczej dowolny, aczkolwiek najlepszy taki, który ma najmniejszy narzut danych).
Jeśli raporty mają być generowane częściej - np dla każdego pracownika oddzielnie - to możesz utworzyć kolejkę i tam dorzucac odpalanie skryptu dla userow, a po tym gdy raport zostanie utworzony (wpis w bazie czy cuś) informuj użytkownika np mailem "Witaj $user, Twój raport jest gotowy...."
Btw. czy na pewno nie da się zoptymalizować tego zapytania?