Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL bergabung ke subquery yang berkorelasi di mana tabel terkait dengan rentang yang tumpang tindih

Anda dapat melakukannya dengan menggunakan CTE dan row_number() .

Demo Fiddle SQL

;with cte as 
(
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY i.id ORDER BY e.EventDate DESC) as rNum
    FROM Item i
    JOIN Event e
        ON i.id between e.ItemStart and e.ItemEnd
)

SELECT ID,
  Name, 
  EventType,
  EventDate FROM cte
WHERE rNum = 1

Pada dasarnya CTE telah bergabung dengan item dan event dan menambahkan kolom baru untuk rownumber dan dipartisi pada item.ID. Berikut screenshot tampilannya. Dari sini saya tinggal pilih rNum =1 yang seharusnya menjadi tanggal acara maksimal untuk setiap item.id.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memperbarui data dari tabel ke tabel sql?

  2. Keluar dari parameter perintah diteruskan ke xp_cmdshell ke dtexec

  3. Ganti nama Kunci Utama di SQL Server (T-SQL)

  4. Skema server SQL dan skema default

  5. String yang dipisahkan koma ke dalam Kolom Tabel di SQL Server