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_id
ognummer
- En anden mastertabel ville gemme "Tråden", som vil indeholde
phone_id
værdier ogthread_id
. Du kan derefter bruge dennethread_id
i dinbesked
tabel, i stedet for at gemme telefonnumrene.