Heim  >  Fragen und Antworten  >  Hauptteil

SQL: Berechnen Sie, ob eine ID, die erst in der letzten Woche aufgetaucht ist, nicht aufgetaucht ist

Ich versuche wöchentlich zu scrollen, um zu sehen, ob ein Benutzer an einer Veranstaltung teilgenommen hat oder nicht. Allerdings möchte ich sie nur dann als „Nicht besucht“ auflisten, wenn sie letzte Woche anwesend waren . Wenn ein Benutzer beispielsweise die Wochen 1 und 7 besucht hat, wird er nur in den Wochen 2 und 8 als „nicht anwesend“ gezählt.

Vereinfachtes Beispiel für Daten:

Tabelle Ereignisse, die alle Veranstaltungstermine (wöchentlich) und eindeutige Veranstaltungs-IDs (zeitlich aufsteigend)

enthält
Event_Date Event_ID
09.03.2023 1
16.03.2023 2
23.03.2023 3

Tabelle Benutzer mit den Veranstaltungsdaten und IDs, an denen sie teilgenommen haben:

Event_Date Event_ID Benutzer_ID
09.03.2023 1 151
16.03.2023 2 151
23.03.2023 3 151
09.03.2023 1 299
23.03.2023 3 299
16.03.2023 2 373

Meine Frage: Wie vervollständige ich die folgende Ausgabe mit SQL? (Benutzer 299 nahm an Aktivität 1, aber nicht an Aktivität 2 teil; Benutzer 373 nahm an Aktivität 2, aber nicht an Aktivität 3 teil)

Verpasstes_Ereignisdatum Missed_Event_ID Benutzer_ID
16.03.2023 2 299
23.03.2023 3 373

Ich habe es mit

versucht
SELECT      Event_ID + 1,
            User_ID
FROM users u
WHERE NOT EXISTS (SELECT 1 FROM events WHERE u.Event_ID=e.Event_ID + 1)

Keine korrekte Ausgabe erzeugt

P粉529581199P粉529581199432 Tage vor471

Antworte allen(1)Ich werde antworten

  • P粉818561682

    P粉8185616822023-09-08 11:03:22

    假设 Event_ID 增加 1,您也可以考虑以下内容。

    SELECT u.Event_ID + 1 AS Missed_Event_ID, u.User_ID
      FROM users u LEFT JOIN users v 
        ON u.User_ID = v.User_ID AND u.Event_ID + 1 = v.Event_ID
     WHERE v.Event_ID IS NULL AND u.Event_ID < (SELECT MAX(Event_ID) FROM events);
    
    -- Query results
    +-----------------+---------+
    | Missed_Event_ID | User_ID |
    +-----------------+---------+
    |               2 |     299 |
    |               3 |     373 |
    +-----------------+---------+
    

    Antwort
    0
  • StornierenAntwort