2016-03-01 2 views
-1

Pourquoi ai-je cette erreur? En cours d'exécution de la requête? Pourquoi ne puis-je pas regrouper par semaine?Query- Code d'erreur 1111 - Utilisation invalide de la fonction de groupe

Le problème est-il dans la clause HAVING?

Select 

CASE 

When 
min(date(trip.pick_up_time)) >= date(timestampadd(day,-7,now())) 
and min(date(trip.pick_up_time)) <= date(timestampadd(day,0,now())) 
Then 'Week 1' 


When 
min(date(trip.pick_up_time)) >= date(timestampadd(day,-14,now())) 
and min(date(trip.pick_up_time)) < date(timestampadd(day,-7,now())) 
Then 'Week 2' 

When 
min(date(trip.pick_up_time)) >= date(timestampadd(day,-21,now())) 
and min(date(trip.pick_up_time)) < date(timestampadd(day,-14,now())) 

Then 'Week 3' 

When 

min(date(trip.pick_up_time)) >= date(timestampadd(day,-29,now())) 
and min(date(trip.pick_up_time)) < date(timestampadd(day,-21,now())) 
Then 'Week 4' 

END AS WEEK 

from 

trip 

WHERE 

min(date(trip.pick_up_time)) > date(timestampadd(day,-28,now()))  
and min(date(trip.pick_up_time)) < date(timestampadd(day,0,now())) 

group by Week HAVING Week is not NULL 
+0

groupe par semaine PRESENTANT semaine est NULL - ce qui est à la fin – learncode

+0

@GiorgosBetsos Utilisation ceci où? – learncode

+0

Copie possible de [Pouvez-vous GROUPER avec un CAS QUAND nom alias?] (Http://stackoverflow.com/questions/19096344/can-you-group-by-a-case-when-then-alias -name) – Marusyk

Répondre

0

Je crains que vous devez utiliser toute instruction CASE dans le GROUP BY comme:

select 
    case when 1=1 then 1 
     when 2=2 then 2 
    end as result 
from table 
group by 
    case when 1=1 then 1 
     when 2=2 then 2 
    end 
+0

Ce n'est pas correct. – learncode

+0

@learncode pourquoi? ça ne marche pas? S'il vous plaît voir http://stackoverflow.com/questions/19096344/can-you-group-by-with-a-case-when-then-alias-name – Marusyk

+0

@learncode J'ai compris que ce sera une grosse question mais ça marche – Marusyk