Abaixo está uma instrução que descreve uma tarefa de geração de SQL, combinada com uma entrada que fornece mais contexto sobre os esquemas de tabela disponíveis. Escreva o código SQL que responda adequadamente à solicitação
 ###Instrução: Qual é o número total de horas de voluntariado para cada programa nos últimos 3 meses, e qual programa tem o maior número total de horas de voluntariado?
 ###Tabelas: 
CREATE TABLE Volunteers (VolunteerID INT, VolunteerName VARCHAR(255), ProgramID INT); CREATE TABLE Programs (ProgramID INT, ProgramName VARCHAR(255)); CREATE TABLE VolunteerHours (VolunteerHourID INT, VolunteerID INT, Hours DECIMAL(10, 2), HourDate DATE);
SELECT ProgramName, SUM(Hours) AS TotalHours, RANK() OVER (ORDER BY SUM(Hours) DESC) AS ProgramRank FROM Volunteers JOIN Programs ON Volunteers.ProgramID = Programs.ProgramID JOIN VolunteerHours ON Volunteers.VolunteerID = VolunteerHours.VolunteerID WHERE HourDate >= DATEADD(MONTH, -3, CURRENT_DATE) GROUP BY ProgramName;