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

Thứ tự MySQL trước khi Nhóm theo

select wp_posts.* from wp_posts
where wp_posts.post_status='publish'and wp_posts.post_type='post'
group by wp_posts.post_author
having wp_posts.post_date = MAX(wp_posts.post_date) /* ONLY THE LAST POST FOR EACH AUTHOR */
order by wp_posts.post_date desc

CHỈNH SỬA:

Sau một số nhận xét, tôi đã quyết định thêm một số thông tin bổ sung.

Công ty tôi đang làm việc cũng sử dụng Postgres và đặc biệt là SQL Server. Cơ sở dữ liệu này không cho phép các truy vấn như vậy. Vì vậy, tôi biết rằng có một cách khác để làm điều này (tôi viết một giải pháp bên dưới). Bạn cũng phải biết mình làm gì nếu bạn không nhóm theo tất cả các cột được xử lý trong phép chiếu hoặc sử dụng các hàm tổng hợp. Nếu không, hãy để nó như vậy!

Tôi đã chọn giải pháp ở trên, bởi vì đó là một câu hỏi cụ thể. Tom muốn nhận bài đăng gần đây của từng tác giả trên trang web wordpress. Theo suy nghĩ của tôi, nó là không đáng kể đối với phân tích nếu một tác giả thực hiện nhiều hơn một bài đăng mỗi giây. Wordpress thậm chí nên cấm nó bởi tính năng phát hiện hai bài đăng spam của nó. Tôi biết từ kinh nghiệm cá nhân rằng có một lợi ích thực sự đáng kể về hiệu suất khi thực hiện một nhóm bẩn thỉu như vậy bằng MySQL. Nhưng nếu bạn biết bạn làm gì, thì bạn sẽ làm được! Tôi có những nhóm bẩn thỉu như vậy trong các ứng dụng mà tôi phải chịu trách nhiệm về mặt chuyên môn. Ở đây tôi có các bảng với một số hàng mio cần 5-15 giây thay vì 100 ++ giây.

Có thể hữu ích về một số ưu và nhược điểm: http://ftp.nchu.edu.tw/MySQL/tech-resources/articles/debunking-group-by-myths.html

SELECT
    wp_posts.*
FROM 
    wp_posts
    JOIN 
    (
        SELECT
            g.post_author
            MAX(g.post_date) AS post_date
        FROM wp_posts as g
        WHERE
            g.post_status='publish'
            AND g.post_type='post'
        GROUP BY g.post_author
    ) as t 
    ON wp_posts.post_author = t.post_author AND wp_posts.post_date = t.post_date

ORDER BY wp_posts.post_date

Nhưng nếu ở đây là nhiều hơn thì một bài đăng mỗi giây cho một tác giả, bạn sẽ nhận được nhiều hơn sau đó một hàng và không phải là hàng cuối cùng duy nhất .

Bây giờ bạn có thể quay bánh xe một lần nữa và nhận bài đăng có Id cao nhất . Ngay cả ở đây, ít nhất cũng không đảm bảo rằng bạn thực sự nhận được cái cuối cùng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql tham gia hai bảng

  2. mysql chọn truy vấn trong một mảng được tuần tự hóa

  3. Cảnh báo:mysqli_connect ():(HY000 / 2002):Không có tệp hoặc thư mục như vậy

  4. Cách tạo và thao tác cơ sở dữ liệu SQL với Python

  5. LỖI 1396 (HY000):Thao tác CREATE USER không thành công cho 'jack' @ 'localhost'