Heim  >  Artikel  >  Datenbank  >  Wie rufe ich die aktuellsten Anwesenheiten für jedes Mitglied in MySQL ab?

Wie rufe ich die aktuellsten Anwesenheiten für jedes Mitglied in MySQL ab?

Linda Hamilton
Linda HamiltonOriginal
2024-11-01 04:35:28509Durchsuche

How to Retrieve the Most Recent Attendance for Each Member in MySQL?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn