Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Truy vấn SQL để chỉ trả về 1 bản ghi cho mỗi ID nhóm

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

hoặc cái này:

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

Điều này sẽ trả về nhiều nhất một bản ghi cho mỗi nhóm ngay cả trong trường hợp có mối quan hệ.

Xem bài viết này trong blog của tôi để so sánh hiệu suất của cả hai phương pháp:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách sử dụng BẤT KỲ / MỘT SỐ Toán tử logic nào trong SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 127

  2. Làm cách nào để lấy danh sách tất cả các bảng trong cơ sở dữ liệu bằng TSQL?

  3. Cách tốt nhất để thực hiện logic câu lệnh chữ hoa chữ thường lồng nhau trong SQL Server

  4. Số tham số không hợp lệ, trạng thái SQL S1093 php odbc mssql

  5. Cách khắc phục “Máy chủ không được định cấu hình cho TRUY CẬP DỮ LIỆU” trong SQL Server