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

Hiển thị tin nhắn mới nhất từ ​​bảng tin nhắn, nhóm theo người dùng

Điều này sẽ khá hiệu quả:

SELECT u.name, sub.*
FROM  (
   SELECT DISTINCT ON (1)
          m.message_from AS user_id
        , m.message AS last_message
   FROM   users    u
   JOIN   messages m ON m.message_to = u.id
   WHERE  u.name = 'Paul'   -- must be unique
   ORDER  BY 1, m.id DESC
   ) sub
JOIN  users u ON sub.user_id = u.id;

Tính toán cho tất cả người dùng thông báo mới nhất trong truy vấn con sub sử dụng DISTINCT ON . Sau đó tham gia users totable lần thứ hai để giải quyết tên.

Chi tiết về DISTINCT ON :
Chọn hàng đầu tiên trong mỗi GROUP BY nhóm?

Ngoài ra:Sử dụng "id" và "name" làm tên cột không phải là một quy ước đặt tên hữu ích.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thêm 'nối tiếp' vào cột hiện có trong Postgres

  2. Cách tách tên thành họ và tên viết tắt

  3. Cách thích hợp để truy cập hàng mới nhất cho từng số nhận dạng riêng lẻ?

  4. SQLException:Tập kết quả này đã bị đóng

  5. PostgreSQL, tối thiểu, tối đa và số ngày trong phạm vi