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

SQL:nhóm theo từ bảng khác và đảo ngược kết quả

Rất đơn giản và nhanh chóng trong PostgreSQL với DISTINCT ON - không phải là SQL tiêu chuẩn nên không có sẵn trong mọi RDBMS.

Câu hỏi không đề cập đến nó, nhưng dựa trên các ví dụ mã, nó thực sự đang tìm kiếm hàng có "ngày cuối cùng" cho mỗi người nhận cho một author nhất định .

SELECT DISTINCT ON (r.recipient)  m.*
FROM   message   m
JOIN   recipient r ON r.m_id = m.id
WHERE  m.author = 1
ORDER  BY r.recipient, m.date DESC, r.m_id -- to break ties

Thông tin chi tiết cũng như nhiều lựa chọn thay thế chuẩn SQL tại đây:
Chọn hàng đầu tiên trong mỗi GROUP BY nhóm?

Một giải pháp khác với SQL cơ bản, tiêu chuẩn. Hoạt động với mọi RDBMS chính, bao gồm cả MySQL (vì thẻ đó đã được thêm vào):

SELECT m.* 
FROM   message   m
JOIN   recipient r ON r.m_id = m.id
WHERE  m.author = 1
AND NOT EXISTS (
   SELECT 1
   FROM   message   m1
   JOIN   recipient r1 ON r1.m_id = m1.id
   WHERE  r1.recipient = r.recipient 
   AND    m1.author = 1
   AND    m1.date > m.date
   )

Chỉ hàng có ngày mới nhất vượt qua NOT EXISTS chống bán tham gia.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự cố khi truy cập một chức năng được cho là đã bị tắt trong CODEIGNITER

  2. MySql xem hiệu suất

  3. Cú pháp TẠO CHỨC NĂNG trong MySQL

  4. Hiệu suất MySQL trong toán tử OR

  5. Làm thế nào để cập nhật hai bảng trong một câu lệnh?