Ich habe eine Tabelle message
, die 4 Hauptsäulen:Subquery mit mehreren Spalten in where-Klausel
id
: Nachricht von id.interlocutor_id
: Die ID des Gesprächspartners.timestamp
: Der Zeitstempel, zu dem die Nachricht gesendet wurde.expiration
: Der Zeitstempel, wann die Nachricht abläuft. Wenn der Wert unter dem aktuellen Zeitstempel liegt, ist er abgelaufen.
Ich wünsche alle letzten Nachrichten von jedem Gesprächspartner zu bekommen (auch wenn sie abgelaufen ist), und ich möchte auch alle nicht abgelaufene Nachrichten (auch wenn sie nicht die letzten sind).
Ich versuchte diese Abfrage aber dann verstand ich, dass ich nicht eine Unterabfrage mit mehreren Spalten machen kann:
SELECT * FROM message
WHERE (expiration > 'CURRENT_TIMESTAMP')
OR (id IN (SELECT id, MAX(timestamp) FROM message GROUP BY interlocutor_id))
Wie soll ich tun?
Vielen Dank! Ihre Anfrage funktioniert gut, aber ich weiß nicht warum. Es sollte in der Lage sein, unerwünschte Nachrichten einzuschließen, wenn die Nachricht nicht die letzte ist und abgelaufen ist (also eine unerwünschte Nachricht), aber es gibt eine andere Nachricht von einem anderen Gesprächspartner, der sein letzter ist und genau denselben Zeitstempel hat , sollte es nicht? Ich weiß nicht, warum es keine solche Nachricht enthält (ich habe es getestet). – Yairopro
Ich wusste nicht, dass es eine SQL-Methode gab, um den aktuellen Zeitstempel zu erhalten. Aber ja, ich meinte es. Vielen Dank – Yairopro