Tricky SQL Query

pulse

Mitglied
Hallo, habe eine Mail Tabelle mit den Feldern user_id,date_created,item_type,deleted, status,folder.

So nun möchte ich alle User wo z.B 30% der letzten 5 Mails der status='EXPIRED' ist. Habe schon Probleme damit für JEDEN User die letzten 5 Mails zu cachen. Mein Versuch bisher:
Code:
select  count(m.status='null')/count(*)*100  , m.user_id,MAX(m.date_created), COUNT(*) as ANZAHL from mail m inner join user u where m.user_id=u.id and m.item_type='CONTACT'   and m.deleted=false and m.folder='INBOX' m.status='EXPIRED' GROUP BY m.user_id ORDER BY m.date_created DESC

Geht das überhaupt solch ein Query zu erstellen?

Für eure Hilfe schonmal Danke!
 
Ich glaube mit Subselects und JOINS kann man hier sicher etwas zaubern.

Es ist möglich das ResulSet von einem Query auf X Zeilen zu begrenzen.
-> Du kannst dir also die letzten fünf Mails eines User selektieren. (Subselect)
In MySQL wäre dieser Befehl "[DEIN QUERY] LIMIT 5"
 
Probier das mal aus, dies sollte funktionieren.. (Evtl. hab ich deine Spaltennamen ein wenig falsch geschrieben)
Code:
SELECT mail.user_id, mail.date_created, mail.status, L1.countExpiredOfLastFive 
FROM mail
LEFT JOIN (
			SELECT Count(*) AS countExpiredOfLastFive, F1.user_id
			FROM (
				SELECT *
				FROM mail
				WHERE mail.status = 'EXPIRED'
				LIMIT 5
			) AS F1
			GROUP BY user_id
			ORDER BY F1.date_created DESC
			) AS L1 ON mail.user_id = L1.user_id
WHERE L1.countExpiredOfLastFive >= ((5/100)*30)
GROUP BY user_id;

Sollte es funktionieren und du weisst nicht warum oder verstehst das Statement nicht, dann gib nochmal Bescheid.. dann schreib ich dir noch eine Erklärung dazu 🙂
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben