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.