SQL: Berechnen Sie, ob eine ID, die erst in der letzten Woche aufgetaucht ist, nicht aufgetaucht ist
P粉529581199
P粉529581199 2023-09-07 11:58:57
0
1
507

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粉529581199
P粉529581199

Antworte allen(1)
P粉818561682

假设 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 |
+-----------------+---------+
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage