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

Permintaan SQL untuk mengembalikan hanya 1 catatan per ID grup

SELECT  t.*
FROM    (
        SELECT  DISTINCT groupid
        FROM    mytable
        ) mo
CROSS APPLY
        (
        SELECT  TOP 1 *
        FROM    mytable mi
        WHERE   mi.groupid = mo.groupid
        ORDER BY
                age DESC
        ) t

atau ini:

SELECT  *
FROM    (
        SELECT  *, ROW_NUMBER() OVER (PARTITION BY groupid ORDER BY age DESC) rn
        FROM    mytable
        ) x
WHERE   x.rn = 1

Ini akan mengembalikan paling banyak satu rekaman per grup bahkan jika seri.

Lihat artikel ini di blog saya untuk perbandingan kinerja kedua metode:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan SQL Server Management Studio File pengaturan yang disimpan tidak dapat ditemukan

  2. Perintah Bersyarat SQL Server Oleh

  3. Melewati DataTable ke prosedur tersimpan sebagai argumen

  4. JDBC SQLServerException:Driver ini tidak dikonfigurasi untuk otentikasi terintegrasi.

  5. Apakah terlalu banyak Left Joins berbau kode?