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

Dapatkan 1 baris teratas setiap grup

;WITH cte AS
(
   SELECT *,
         ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn
   FROM DocumentStatusLogs
)
SELECT *
FROM cte
WHERE rn = 1

Jika Anda mengharapkan 2 entri per hari, maka ini akan secara sewenang-wenang memilih satu. Untuk mendapatkan kedua entri selama sehari, gunakan DENSE_RANK sebagai gantinya

Untuk dinormalisasi atau tidak, itu tergantung apakah Anda ingin:

  • pertahankan status di 2 tempat
  • menjaga riwayat status
  • ...

Seperti berdiri, Anda mempertahankan riwayat status. Jika Anda juga menginginkan status terbaru di tabel induk (yang merupakan denormalisasi), Anda memerlukan pemicu untuk mempertahankan "status" di induk. atau jatuhkan tabel riwayat status ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jelajahi Penyebab, &Solusi Korupsi Database SQL Server

  2. Cara melihat log transaksi di SQL Server 2008

  3. Konversi gagal saat mengonversi tanggal dan/atau waktu dari string karakter saat memasukkan datetime

  4. DATEADD() Contoh di SQL Server

  5. Menghitung jumlah bulan penuh antara dua tanggal dalam SQL