Rumah  >  Soal Jawab  >  teks badan

SQL: Kira jika ID yang hanya muncul pada minggu lepas tidak muncul

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粉529581199P粉529581199384 hari yang lalu432

membalas semua(1)saya akan balas

  • P粉818561682

    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 |
    +-----------------+---------+
    

    balas
    0
  • Batalbalas