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

Trả lại hàng có giá trị tối đa của một cột cho mỗi nhóm

Điều này cũng có thể thực hiện được mà không cần truy vấn con:

SELECT DISTINCT
       id
      ,max(round) OVER (PARTITION BY id) AS round
      ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score
FROM   SCORES
WHERE  id IN (1,2,3)
ORDER  BY id;

Trả về chính xác những gì bạn yêu cầu.
Điểm quan trọng là DISTINCT được áp dụng sau chức năng cửa sổ.

SQL Fiddle.

Có thể nhanh hơn vì nó sử dụng cùng một cửa sổ hai lần:

SELECT DISTINCT
       id
      ,first_value(round) OVER (PARTITION BY id ORDER BY round DESC) AS round
      ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score
FROM   SCORES
WHERE  id IN (1,2,3)
ORDER  BY id;

Nếu không thì làm tương tự.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trả lại tên ngày ngắn từ một ngày trong Oracle

  2. Tìm các mục trùng lặp trong một cột

  3. Tham số Oracle với câu lệnh IN?

  4. Múi giờ java.sql.Timestamp có cụ thể không?

  5. cách chèn ngày hiện tại vào trường DATE ở định dạng dd / mm / yyyy trong oracle