Rumah > Soal Jawab > teks badan
Saya cuba melakukan tatal mingguan untuk melihat sama ada pengguna menghadiri atau tidak menghadiri acara. Namun, saya hanya ingin menyenaraikan mereka sebagai "Tidak Hadir" jika mereka hadir pada minggu lepas . Sebagai contoh, jika pengguna menghadiri minggu 1 dan 7, mereka hanya akan dikira sebagai "tidak hadir" dalam minggu 2 dan 8.
Contoh data ringkas:
Jadual Acara yang merangkumi semua tarikh acara (mingguan) dan ID acara unik (masa menaik)
Tarikh_Peristiwa | Event_ID |
---|---|
2023-03-09 | 1 |
2023-03-16 | 2 |
2023-03-23 | 3 |
Jadual Pengguna menunjukkan tarikh acara dan ID yang mereka hadiri:
Tarikh_Peristiwa | Event_ID | ID_Pengguna |
---|---|---|
2023-03-09 | 1 | 151 |
2023-03-16 | 2 | 151 |
2023-03-23 | 3 | 151 |
2023-03-09 | 1 | 299 |
2023-03-23 | 3 | 299 |
2023-03-16 | 2 | 373 |
Soalan saya: Bagaimana untuk melengkapkan output berikut menggunakan SQL? (Pengguna 299 mengambil bahagian dalam aktiviti 1 tetapi bukan aktiviti 2; pengguna 373 menyertai aktiviti 2 tetapi bukan aktiviti 3)
Tarikh_Peristiwa_Terlepas | ID_Acara_Terlepas | ID_Pengguna |
---|---|---|
2023-03-16 | 2 | 299 |
2023-03-23 | 3 | 373 |
Saya cuba menggunakan
SELECT Event_ID + 1, User_ID FROM users u WHERE NOT EXISTS (SELECT 1 FROM events WHERE u.Event_ID=e.Event_ID + 1)
Tidak menghasilkan output yang betul
P粉8185616822023-09-08 11:03:22
Andaikan Event_ID
meningkat sebanyak 1, anda juga boleh mempertimbangkan perkara berikut.
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 | +-----------------+---------+