2016-10-28 2 views

Antwort

2

Ihr aktueller Ansatz ist fast richtig. Alles, was Sie tun müssen, ist von der deutlichen Anzahl von Jahren zu zählen:

SELECT user_id 
FROM requests 
WHERE YEAR(request_day) IN (2014, 2015, 2016) 
GROUP BY user_id 
HAVING COUNT(DISTINCT YEAR(request_day)) = 3; 

Wenn die DISTINCT Anzahl der Jahre 3 ist, dann bedeutet es, dass ein Benutzer alle drei der Jahre in Ihrer WHERE IN Klausel hat.

Beachten Sie, dass eine andere Art und Weise, dies zu tun bedingte Aggregation wäre:

SELECT user_id 
FROM requests 
GROUP BY user_id 
HAVING SUM(CASE WHEN YEAR(request_day) = 2014 THEN 1 ELSE 0 END) > 0 AND 
     SUM(CASE WHEN YEAR(request_day) = 2015 THEN 1 ELSE 0 END) > 0 AND 
     SUM(CASE WHEN YEAR(request_day) = 2016 THEN 1 ELSE 0 END) > 0 

Dieser Ansatz würde skaliert besser, wenn Ihre Abfrage komplexer bekommen waren.

+0

Danke für die Lösung ... Ich mochte die zweite !! :) – Teja

Verwandte Themen