Wählen Sie mithilfe von „Gruppieren nach“ in MySQL nur den neuesten Wert aus
Wenn Sie versuchen, die letzte Anwesenheit für jedes Mitglied aus einer Tabelle abzurufen, müssen Sie Es kann vorkommen, dass Sie mithilfe einer einfachen GROUP BY-Abfrage die erste Anwesenheit anstelle der letzten abrufen. Um dieses Problem zu lösen, gibt es mehrere Ansätze:
Verwenden einer Unterabfrage
Sie können eine Unterabfrage verwenden, um den maximalen Zeitstempel für jedes Mitglied zu ermitteln und dann der Originaltabelle beizutreten auf diesem Zeitstempel, um die entsprechende Anwesenheit abzurufen:
<code class="sql">SELECT id_branch_channel, id_member, attendance, timestamp, id_member FROM view_event_attendance AS t1 WHERE id_event = 782 AND timestamp = ( SELECT MAX(timestamp) FROM view_event_attendance AS t2 WHERE t1.id_member = t2.id_member AND t1.id_event = t2.id_event GROUP BY id_event, id_member ) OR timestamp IS NULL GROUP BY id_event, id_member;</code>
Verwenden einer abgeleiteten Tabelle
Sie können eine abgeleitete Tabelle erstellen, die die Zeilen nach Zeitstempel in absteigender Reihenfolge sortiert Verwenden Sie dann diese Tabelle als Quelle für Ihre GROUP BY-Abfrage:
<code class="sql">SELECT id_branch_channel, id_member, attendance, timestamp, id_member FROM ( SELECT id_branch_channel, id_member, attendance, timestamp, id_member FROM view_event_attendance WHERE id_event = 782 ORDER BY timestamp DESC ) AS sorted GROUP BY id_event, id_member;</code>
Verwenden einer Fensterfunktion
Sie können eine Fensterfunktion verwenden, um den Maximalwert zu ermitteln Zeilen für jedes Mitglied und verwenden Sie dann diesen Maximalwert, um die Zeilen zu filtern:
<code class="sql">SELECT id_branch_channel, id_member, attendance, timestamp, id_member FROM ( SELECT id_branch_channel, id_member, attendance, timestamp, id_member, MAX(timestamp) OVER (PARTITION BY id_event, id_member) AS max_timestamp FROM view_event_attendance WHERE id_event = 782 ) AS subquery WHERE timestamp = max_timestamp GROUP BY id_event, id_member;</code>
Verwenden eines Tricks zur Zeichenfolgenverkettung
Dieser Ansatz beinhaltet die Verkettung des Zeitstempels und der Anwesenheit in eine einzelne Zeichenfolge und verwenden Sie die Funktion MAX(), um die größte Zeichenfolge zu finden. Indem Sie die Anwesenheit aus der maximalen Zeichenfolge extrahieren, rufen Sie effektiv die neueste Anwesenheit ab:
<code class="sql">SELECT id_branch_channel, id_member, SUBSTR(MAX(CONCAT(FROM_UNIXTIME(timestamp), attendance)), 20) AS attendance, timestamp, id_member FROM view_event_attendance WHERE id_event = 782 GROUP BY id_event, id_member;</code>
Der beste Ansatz für Ihre spezifische Situation hängt von den Leistungsmerkmalen Ihrer Datenbank und der Größe Ihres Datensatzes ab.
Das obige ist der detaillierte Inhalt vonWie rufe ich die aktuellsten Anwesenheiten für jedes Mitglied in MySQL ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!