En måde at bestemme "tråden" for hver række på er CONCAT()
MINST
af de to tal med STØRSTE
af de samme to tal.
Vi kan derefter GRUPPER EFTER på "tråden", for at få den seneste genereret_tid . I HAVING klausul, frafiltrerer vi kun de "tråde", som har mindst én 'INDKOMMENDE' besked med 'REVIEW' type.
SELECT m1.*FROM message AS m1 JOIN (SELECT Concat(Least(m.from_number, m.to_number), '|', Greatest(m.from_number, m.to_number)) AS thread, Max( m.genereret_tid) AS max_generated_time FRA meddelelse AS m GRUPPE VED tråd HAVING Sum(m.direction ='INDKOMMENDE' OG m.type ='REVIEW')) AS dt ON dt.thread =Concat(Mindst(m1.fra_nummer, m1. to_number), '|', Greatest(m1.from_number, m1.to_number)) OG dt.max_generated_time =m1.generated_time; Resultat
| id | til_nummer | fra_nummer | besked | retning | type | genereret_tid || --- | ------------ | ------------ | --------------- | ---------- | ------ | ------------------ || 3 | +15005550004 | +16232950692 | Hvordan har du det ? | UDGÅENDE | | 13-07-2019 21:15:00 || 5 | +16232950692 | +15005550001 | Hav en god dag | INDGÅENDE | ANMELDELSE | 2019-07-12 12:17:00 | Sidenote:
- Ovenstående tilgang (og dit nuværende skemadesign) er ikke i stand til at bruge indekser, og det vil derfor ikke være effektivt .
- Jeg vil hellere omdesigne skemaet ved at oprette to ekstra mastertabeller. En mastertabel ville gemme telefonnumrene:
phone_idognummer - En anden mastertabel ville gemme "Tråden", som vil indeholde
phone_idværdier ogthread_id. Du kan derefter bruge dennethread_idi dinbeskedtabel, i stedet for at gemme telefonnumrene.